Ruby   发布时间:2019-10-05  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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?在包含模块中避免为生成的路由名称添加前缀: @H_263_4@module M def self.use_relative_model_naming? true end end

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails – Rails url_for和命名空间的模型全部内容,希望文章能够帮你解决ruby-on-rails – Rails url_for和命名空间的模型所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。