polymorphic_url(@resource)生成`new`动作而不是`create`动作路径

时间:2014-12-08 03:07:19

标签: ruby-on-rails polymorphism

我有一个多态模型。在polymorphic_url(@resource)中生成form_for时,会添加错误的网址。:

polymorphic_url(@resource)  # generates this
<form accept-charset="UTF-8" action="/firm/accounts/sageview/resource_contents/new" method="post">

我需要这个:

polymorphic_url(@resource)
<form accept-charset="UTF-8" action="/firm/accounts/sageview/resource_contents" method="post">

此处@resource已经过检查:

#<ResourceContent id: nil, owner_id: 1, owner_type: "Firm::Account", metadata: {"type"=>"twitter"}, title: nil, description: nil, created_at: nil, updated_at: nil, article: nil>

这个动作是错误的,它应该转到firm/accounts/sageview/resource_contents,但它在结尾处添加了新内容。我希望来自new_polymorphic_url(@resource)的操作,但我没有使用new_path。

添加路线:

firm_account_resource_contents    GET   /firm/accounts/:account_id/resource_contents(.:format) firm/accounts/resource_contents#index 
                                  POST  /firm/accounts/:account_id/resource_contents(.:format)                        firm/accounts/resource_contents#create
new_firm_account_resource_content GET   /firm/accounts/:account_id/resource_contents/new(.:format) firm/accounts/resource_contents#new

有人看到这个实现有问题吗?

1 个答案:

答案 0 :(得分:1)

我相信这是因为@resource是一个新对象。我觉得你需要有更多的方法调用来生成那条路径,因为你有一个指定的路径。尝试这样的事情:

polymorphic_url([@account, Resource])

提供Resource类而不是对象将提供索引路径。

以下是表单中的示例(在我当前正在处理的项目上在我的本地计算机上测试过)。

<%= form_for Note.new, url: polymorphic_path([@parent, Note]) do |f| %>
  <%= f.text_field :content %>
<% end %>

产生:

    <form class="new_note" id="new_note" action="/listings/1/notes" accept-charset="UTF-8" method="post">
      <input name="utf8" type="hidden" value="✓">
      <input type="hidden" name="authenticity_token" value="+Ir0iqknLczzgJWLBuzJFtLtxZP/L2iyciwc5dxVKak1AbbzDrEpncIzhioxEA4I5UKuKo/quOktgMuNHJwdxw==">
      <input type="text" name="note[content]" id="note_content">
    </form>

See this for more information.