【问题标题】:Polymorphic urls with singular resources具有单一资源的多态 url
【发布时间】: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


    【解决方案1】:

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

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

    即使只有一个warranty_review,我也会使用非单一途径。归根结底,这只是美学。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多