我有一个多态模型。在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
有人看到这个实现有问题吗?
答案 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>