当我使用以下路由设置时,我得到了奇怪的输出:
resources :warranty_types do
resources :decisions
end
resource :warranty_review, :only => [] do
resources :decisions
end我有许多warranty_types,但只有一个warranty_review (因此是单数路由声明)。这些决策与两者都是多态关联的。我只有一个decisions控制器和一个_form.html.haml partial来呈现决策表单。
这是视图代码:
= simple_form_for @decision, :url => [@decision_tree_owner, @decision.becomes(Decision)] do |form|warranty_type url如下所示(用于新决策):
/warranty_types/2/decisions而warranty_review url如下所示:
/admin/warranty_review/decisions.1我认为因为warranty_review id无处可去,所以它只是作为一个扩展附加到末尾。
有人能解释一下这是怎么回事吗?我怎么才能修复它呢?
我可以通过尝试检测warranty_review类并用:warranty_review替换@decision_tree_owner来解决这个问题,这会生成正确的url,但这很麻烦。我本以为路由足够智能,可以意识到warranty_review是一个单一的资源,因此丢弃了URL中的id。
顺便说一下,这是Rails 3 :)
发布于 2011-03-12 06:01:09
显然,这是一个长期存在的rails错误,polymorphic_url无法从路由设置中知道资源是否是单一的:
即使只有一个warranty_review,我也会使用非单一的路由。这只是一天结束时的美学。
https://stackoverflow.com/questions/5269867
复制相似问题