1

在早期阶段,我的 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| %>

要得到我想要的,只要我省略:controlleror :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| %>
4

0 回答 0