使用以下路由设置时,我得到奇怪的输出:
resources :warranty_types do
resources :decisions
end
resource :warranty_review, :only => [] do
resources :decisions
end
我有很多warranty_types但只有一个warranty_review(因此是单一路线声明)。决策与两者的多态性相关。我只有一个决策控制器和一个_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:)
答案 0 :(得分:2)
显然这是一个长期存在的错误,其中polymorphic_url无法从路由设置中知道资源是否是单数:
即使只有一个warranty_review,我也会采用非单一路线。这一天只是美学。