在一个比较复杂的 rails 程序里,如果你使用 namespace 来进行模块化:
class Admin::Company < ApplicationRecord
end
class Admin::Custom < ApplicationRecord
end
namespace :admin do
resources :companies do
resources :customs
end
end
在 form_for 时就会遇到麻烦
<%= form_for([@company, @custom]) do |f| %>
<% end %>
这样 rails 会去找一个不存在的路由然后报错:
undefined method admin_company_admin_customs_path
这样也会报错
<%= form_for([:admin, @company, @custom]) do |f| %>
<% end %>
undefined method admin_admin_company_admin_customs_path
我之前的解决方法都是给 form_for 传入 url 参数,手动指定 path,但是这样又要判断是 new 还是 edit
今天终于找到了解决方法
在 admin.rb 里定义 use_relative_model_naming?
module Admin
def self.use_relative_model_naming?
true
end
end
然后
<%= form_for([:admin, @company, @custom]) do |f| %>
<% end %>
一切又回归优雅了
https://coderwall.com/p/heed_q/rails-routing-and-namespaced-models