【发布时间】:2011-07-13 07:05:30
【问题描述】:
使用以下路由设置时,我得到了奇怪的输出:
resources :warranty_types do
resources :decisions
end
resource :warranty_review, :only => [] do
resources :decisions
end
我有许多保修类型,但只有一个保修评论(因此是单数路线声明)。决策在多态上与两者相关联。我只有一个决策控制器和一个 _form.html.haml 部分来呈现决策的表单。
这是查看代码:
= simple_form_for @decision, :url => [@decision_tree_owner, @decision.becomes(Decision)] do |form|
warranty_type 网址如下所示(用于新决定):
/warranty_types/2/decisions
warranty_review 网址如下所示:
/admin/warranty_review/decisions.1
我认为因为warranty_review id 无处可去,它只是作为扩展附加到末尾。
有人可以解释这里发生了什么以及我可以如何解决它吗?
我可以通过尝试检测warranty_review 类并将@decision_tree_owner 替换为:warranty_review 来解决它,这会生成正确的url,但这很麻烦。我原以为路由会足够聪明,可以意识到warranty_review 是一个单一资源,从而丢弃URL 中的ID。
这是 Rails 3 :)
【问题讨论】:
标签: ruby ruby-on-rails-3 routing url-routing polymorphism