当提供对象时,Rails通常非常聪明地确定正确的路由。例如
<%= form_for [@parent,@child] do |f| %>
或
<%= polymorphic_path(@parent,@child) %>
但是在使用命名空间模型时我总是遇到问题。
例如,使用时:
@parent = ActsAs::Draft.find(params[:draft_id])
@child = ActsAs::Vote.new
Rails尝试使用
polymorphic_path(@parent,@child) = acts_as/drafts/:id/acts_as/votes
这是有道理的。但是如何定义这条路线?
使用
namespace :acts_as do
resources :drafts do
namespace :acts_as do
resources :votes
end
end
end
Rails尝试查找双命名空间控制器
ActsAs::ActsAs::Votes
将模块设置为nil
namespace :acts_as do
resources :drafts do
namespace :acts_as, module: nil do
resources :votes
end
end
end
引发wrong constant name
错误,我认为是因为Rails现在正在寻找Votes
而不是ActsAs::Votes
。
明确定义控制器
resources :votes, controller: "acts_as/votes"
无济于事。
我必须忽视这里显而易见的事情!
使用polymorphic_path
命名空间模型的正确方法是什么?