在早期阶段,我的 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/ }
然后在form_for 的这一部分中提到我可以做类似的事情,
<%= form_for [:dashboard, @article], url: {article_type: 'image'}, html: {class: 'article_form'} do |f| %>
要得到我想要的,只要我省略:controller
or :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| %>