具有奇异资源的多态网址

时间:2011-03-11 06:50:15

标签: ruby ruby-on-rails-3 routing url-routing polymorphism

使用以下路由设置时,我得到奇怪的输出:

  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:)

1 个答案:

答案 0 :(得分:2)

显然这是一个长期存在的错误,其中polymorphic_url无法从路由设置中知道资源是否是单数:

https://rails.lighthouseapp.com/projects/8994/tickets/4077-wrong-redirect-after-creation-of-nested-singleton-resource-using-responder

即使只有一个warranty_review,我也会采用非单一路线。这一天只是美学。