ruby-on-rails – Rails url_for和命名空间的模型
在Rails中,模块中的命名空间模型是否可以从url_for获取正确的行为?
例如,这里,url_for按预期工作: # app/models/user.rb class User < ActiveRecord::Base end # config/routes.rb resources :users # app/views/users/index.html.haml = url_for(@user) # /users/1 而将User模型放入模块之后,url_for就抱怨一个未定义的方法m_user_path: # app/models/m/user.rb module M class User < ActiveRecord::Base end end # config/routes.rb resources :users # app/views/users/index.html.haml = url_for(@user) # undefined method 'm_users_path' 是否可以让url_for忽略M :: User中的模块,并返回url_for(@user)的user_path而不是m_user_path? UPDATE 所以,经过近5年,这里是解决方案,谢谢esad.这已经在Rails 4.2中进行了测试. # app/models/m/user.rb module M class User < ActiveRecord::Base end end # app/models/m.rb module M def self.use_relative_model_naming? true end def self.table_name_prefix 'm_' end end # config/routes.rb resources :users # app/views/users/index.html.haml = url_for(@user) # /users/1 注意:当使用bin / rails g scaffold m / user生成模型,视图和控制器时,视图和控制器也将被命名.您需要将app / views / m / users移动到app / views / users和app / controllers / m / users_controller.rb到app / controllers / users_controller.rb;除了模型M :: User之外,您还需要删除对模块M的引用. 最后,这里的目标是命名空间模型,而不是视图和控制器.使用esad解决方案,模块M(包含用户)被明确地告知不出现在路由中.因此,有效地,M被剥离,只有用户遗留. 用户模型现在可以驻留在app / views / models / m / user.rb中,用户控制器驻留在app / views / controllers / users_controller.rb中,并且可以在app / views / users中找到这些视图. 解决方法
只需定义use_relative_model_naming?在包含模块中避免为生成的路由名称添加前缀:
module M def self.use_relative_model_naming? true end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |