控制器默认包裹模型


/app
/controllers
/users
profiles_controller.rb
users_controller.rb
/models
/user
/profile.rb
user.rb

#/app/models/user.rb
class User < ActiveRecord::Base
has_one :profile, class_name: "User::Profile"
end
#/app/models/user/profile.rb
class User::Profile < ActiveRecord::Base
belongs_to :user
end
#/app/controllers/users/profiles_controller.rb
class Users::ProfilesController < ApplicationController
layout "layouts/profile"
end
#/app/controllers/users/users_controller.rb
class Users::UsersController < Users::ProfilesController
def show
@user = User.find(params[:id])
end
end

当访问控制台中的配置文件模型时,我没有错误:

vagrant@lucid32:/流浪$rails c加载开发环境(Rails 3.2.11)irb(main):001:0>u=用户新=>#用户id:nil,created_at:nil,updated_at:nir,用户名:nil,crypted_password:nil,password_salt:nil,persistence_token:nil,易腐性_token:nil,activate_token:nil,login_count:0,failed_logn_count:0,activated:false,禁止:false,last_request_at:nil,last_login_at:nir,current_login-at:nil(0.5ms)开始(0.4ms)COMMIT=>#User::Profile id:nil,User_id:nil,person:nil,company:nil,company_position:nil,info:nil,生日:nil,created_at:nil,updated_at:nil>

我在尝试访问User/users#show时遇到以下错误。

LoadError in Users:UsersController#show应使用/warrant/app/models/user/profile.rb定义配置文件activesupport(3.2.11)lib/active_support/dependences.rb:503:在`load_missing_constant'中activesupport(3.2.11)lib/active_support/dependences.rb:192:在`block in const_missing'中activesupport(3.2.11)lib/active_support/dependents.rb:190:在"each"中activesupport(3.2.11)lib/active_support/dependents.rb:190:在`const_missing'中activesupport(3.2.11)lib/active_support/dependences.rb:514:在`load_missing_constant'中activesupport(3.2.11)lib/active_support/dependences.rb:192:在`block in const_missing'中activesupport(3.2.11)lib/active_support/dependents.rb:190:在"each"中activesupport(3.2.11)lib/active_support/dependents.rb:190:在`const_missing'中activesupport(3.2.11)lib/active_support/inflector/methods.rb:230:在`block in constantize中activesupport(3.2.11)lib/active_support/inflector/methods.rb:229:在"each"中activesupport(3.2.11)lib/active_support/inflector/methods.rb:229:在"constantize"中activesupport(3.2.11)lib/active_support/inflector/methods.rb:260:在"safe_instantize"中activesupport(3.2.11)lib/active_support/core_ext/string/inflections.rb:66:在"safe_instantize"中actionpack(3.2.11)lib/action_controller/metal/params_wrapper.rb:152:在`_default_wrap_model'中actionpack(3.2.11)lib/action_controller/metal/params_wrapper.rb:169:在"_set_wrapper_defects"中actionpack(3.2.11)lib/action_controller/metal/params_wrapper.rb:133:在"继承的"中actionpack(3.2.11)lib/abstract_controller/railties/routes_helpers.rb:7:在`block(2 level)in with'中actionpack(3.2.11)lib/action_controller/railties/paths.rb:7:在"块(2个级别)与"中app/controllers/users/profiles_controller.rb:1:在"中activesupport(3.2.11)lib/active_support/dependents.rb:469:在"加载"中activesupport(3.2.11)lib/active_support/dependences.rb:469:在"加载文件中的块"中activesupport(3.2.11)lib/active_support/dependents.rb:639:在`new_constants_in'中activesupport(3.2.11)lib/active_support/dependences.rb:468:在`load_file'中activesupport(3.2.11)lib/active_support/dependences.rb:353:在`require_or_load'中activesupport(3.2.11)lib/active_support/dependences.rb:502:在`load_missing_constant'中activesupport(3.2.11)lib/active_support/dependences.rb:192:在`block in const_missing'中activesupport(3.2.11)lib/active_support/dependents.rb:190:在"each"中activesupport(3.2.11)lib/active_support/dependents.rb:190:在`const_missing'中app/controllers/users/users_controller.rb:1:在"中activesupport(3.2.11)lib/active_support/dependents.rb:469:在"加载"中activesupport(3.2.11)lib/active_support/dependences.rb:469:在"加载文件中的块"中activesupport(3.2.11)lib/active_support/dependents.rb:639:在`new_constants_in'中activesupport(3.2.11)lib/active_support/dependences.rb:468:在`load_file'中activesupport(3.2.11)lib/active_support/dependences.rb:353:在`require_or_load'中activesupport(3.2.11)lib/active_support/dependences.rb:502:在`load_missing_constant'中activesupport(3.2.11)lib/active_support/dependences.rb:192:在`block in const_missing'中activesupport(3.2.11)lib/active_support/dependents.rb:190:在"each"中activesupport(3.2.11)lib/active_support/dependents.rb:190:在`const_missing'中activesupport(3.2.11)lib/active_support/inflector/methods.rb:230:在`block in constantize中activesupport(3.2.11)lib/active_support/inflector/methods.rb:229:在"each"中activesupport(3.2.11)lib/active_support/inflector/methods.rb:229:在"constantize"中activesupport(3.2.11)lib/active_support/dependences.rb:554:在"get"中actionpack(3.2.11)lib/action_dispatch/routing/route_set.rb:69:in `controller_reference'actionpack(3.2.11)lib/action_dispatch/routing/route_set.rb:54:在"控制器"中actionpack(3.2.11)lib/action_dispatch/routing/route_set.rb:32:in"call"travel(1.0.4)lib/trouter.rb:68:in"调用中的块"旅程(1.0.4)lib/trouter.rb:56:in"each"travel(1.0.4)lib/trouter.rb:56:在"call"中actionpack(3.2.11)lib/action_dispatch/routing/route_set.rb:601:在"call"中actionpack(3.2.11)lib/action_dispatch/middleware/bestrongtandards_support.rb:17:在"call"中rack(1.4.5)lib/rack/etag.rb:23:in"call"rack(1.4.5)lib/rrack/conditionalget.rb:25:in"call"actionpack(3.2.11)lib/action_dispatch/middleware/head.rb:14:在"call"中actionpack(3.2.11)lib/action_dispatch/middleware/params_parser.rb:21:in"call"actionpack(3.2.11)lib/action_dispatch/middleware/flash.rb:242:在"call"中rack(1.4.5)lib/rack/session/abstract/id.rb:210:在"上下文"中rack(1.4.5)lib/rack/session/abstract/id.rb:205:在"call"中actionpack(3.2.11)lib/action_dispatch/medleware/cookies.rb:341:在"call"中activerecord(3.2.11)lib/active_record/query_cache.rb:64:在"call"中activerecord(3.2.11)lib/active_record/connection_adapters/abstract/connection_pool.rb:479:在"call"中actionpack(3.2.11)lib/action_dispatch/middleware/callbacks.rb:28:in"调用中的块"activesupport(3.2.11)lib/active_support/callbacks.rb:405:在`_run__1047939203__call__223494719__callbacks'中activesupport(3.2.11)lib/active_support/callbacks.rb:405:在`__run_callback'中activesupport(3.2.11)lib/active_support/callbacks.rb:385:在`_run_call_callbacks'中activesupport(3.2.11)lib/active_support/callbacks.rb:81:in `run_callbacks'actionpack(3.2.11)lib/action_dispatch/middleware/callbacks.rb:27:in"call"actionpack(3.2.11)lib/action_dispatch/medleware/reloader.rb:65:in"call"actionpack(3.2.11)lib/action_dispatch/middleware/remote_ip.rb:31:in"call"actionpack(3.2.11)lib/action_dispatch/middleware/debug_exceptions.rb:16:在"call"中actionpack(3.2.11)lib/action_dispatch/medleware/show_exceptions.rb:56:在"call"中railties(3.2.11)lib/rails/rack/logger.rb:32:in"call_app"railties(3.2.11)lib/rails/rack/logger.rb:16:in"调用中的块"activesupport(3.2.11)lib/active_support/tagged_logging.rb:22:in `tagged'railties(3.2.11)lib/rails/rack/logger.rb:16:in"call"actionpack(3.2.11)lib/action_dispatch/middleware/request_id.rb:22:in"call"rack(1.4.5)lib/rack/methodoverride.rb:21:in"call"rack(1.4.5)lib/rack/runtime.rb:17:in"call"activesupport(3.2.11)lib/active_support/cache/strategy/local_cache.rb:72:in"call"rack(1.4.5)lib/rack/lock.rb:15:in"call"actionpack(3.2.11)lib/action_dispatch/middleware/static.rb:62:in"call"railties(3.2.11)lib/rails/engine.rb:479:在"call"中railties(3.2.11)lib/rails/application.rb:223:在"call"中railties(3.2.11)lib/rails/railtie/可配置.rb:30:在"method_missing"中rack(1.4.5)lib/rrack/lint.rb:48:in `_call'rack(1.4.5)lib/rrack/lint.rb:36:in"call"rack(1.4.5)lib/rack/showexceptions.rb:24:in"call"rack(1.4.5)lib/rack/commonlogger.rb:33:in"call"rack(1.4.5)lib/rrack/chunked.rb:43:in"call"rack(1.4.5)lib/rack/content_length.rb:14:in"call"unicon(4.6.2)lib/uniorn/http_server.rb:552:在"process_client"中unicon(4.6.2)lib/uniorn/http_server.rb:632:在`worker_loop'中unicon(4.6.2)lib/uniorn/http_server.rb:500:在"spawn_missing_workers"中unicon(4.6.2)lib/uniorn/http_server.rb:142:在"start"中独角兽(4.6.2)bin/独角兽:126:in `'/usr/local/renv/versions/1.9.3-p194/bin/unicon:23:in"load"/usr/local/rbenv/versions/1.9.3-p194/bin/unicon:23:in `'

我不知道确切的原因是什么,但我的意见是:

方法_default_wrap_model中的UsersController试图访问配置文件模型(没有命名空间)并引发错误。因为当我重命名Profile模型(例如:Info)时,我没有错误,一切都很好。

所以我的问题是:如何避免这个错误?

问题是因为我将带有名称空间模型的目录添加到了autoload_paths:

#/config/application.rb
config.autoload_paths += %W(#{Rails.root}/app/models/user)

当我把它取下来的时候,一切都很好。

最新更新