Rails 4:form_for带有一组对象的附加参数

时间:2013-11-04 16:37:31

标签: ruby-on-rails form-for

在早期阶段,我的form_for看起来像这样:

<%= form_for [:dashboard, @article], html: {class: 'article_form'} do |f| %>

并且在基于@article创建或更新时它已经知道。但后来我需要添加一个额外的参数,让它命名为article_type。我在路线中添加了这样的内容:

resources :articles, path: 'articles/:article_type', constraints: { type: /image|video/ }

然后在this section of form_for中提到我可以做类似的事情,

<%= form_for [:dashboard, @article], url: {article_type: 'image'}, html: {class: 'article_form'} do |f| %>

得到我想要的东西,只要我省略:controller:action,就可以正确地生成它。但它似乎没有这样做......

我一直得到的是:

如果@article是新的

<form accept-charset="UTF-8" action="/dashboard/articles/image/new" class="article_form" id="new_article" method="post">

如果@article存在:

<form accept-charset="UTF-8" action="/dashboard/articles/image/new" class="article_form" id="edit_article_3" method="post">

查看它仅创建/new的位置,这是错误的,因为对于创建操作应为/dashboard/articles/image,如果编辑则为/dashboard/articles/image/3

修改

临时解决方案我必须让它发挥作用

<%
  named_route = if @article.new_record?
    dashboard_articles_path(@article, article_type: params[:article_type])
  else
    dashboard_article_path(@article, article_type: params[:article_type])
  end
%>
<%= form_for [:dashboard, @article], url: named_route, html: {class: 'article_form'} do |f| %>

0 个答案:

没有答案