我有一个看起来像这样的路线文件(它非常嵌套......我知道):
scope :admin, module: :admin do
namespace :breadth do
resources :areas, as: 'areas' do
resources :sequences, as: 'sequences'
end
end
end
当运行rake routes
时,我得到了所有路线,包括一个名为breatdh_area_sequences
的路线(这正是我想要的)。问题是,当我创建一个表单时,rails会根据我给它的参数构建错误的url:
= form_for [:breadth, breadth_sequence.area, breadth_sequence] do |f|
...
这给了我:
undefined method `breadth_breadth_area_breadth_sequences_path' for #<#<Class:0x007fe55bcf16b8>:0x007fe55d9a3f68>
rails究竟如何获取这些参数并从中创建一个URL路径?我假设它在每个对象上调用一个方法?这是我可以覆盖的东西,以获得我期望的命名路由(不覆盖:在form_for上的url)
答案 0 :(得分:0)
由于您希望以不同于路线的方式命名对象,因此无法使用。您的路线/控制器需要在模型命名时命名,如果您的模型是BreadthArea
(如路线所认为的那样),您的路线也应以相同的方式命名。
答案 1 :(得分:0)
为了完成这项工作,我必须覆盖self.model_name
和BreadthArea
上的BreadthSequence
方法。此方法是form_for
在第一个参数中使用对象(或对象数组)时如何计算URL。
class BreadthArea < ActiveRecord::Base
def self.model_name
ActiveModel::Name.new(self, nil, "Area")
end
...
end
class BreadthSequence < ActiveRecord::Base
def self.model_name
ActiveModel::Name.new(self, nil, "Sequence")
end
...
end