Form_for具有多个状态

时间:2016-04-18 20:56:25

标签: ruby-on-rails ruby

我有一个Blog模型,它有不同的状态。为了保持一个瘦的控制器并遵循每个控制器只有CRUD操作的约定,我跟着DHH's namespacing controllers pattern并命名为Blog控制器。

现在我有一个Blogs::NewDraft控制器,一个Blogs::AwaitingApproval控制器和一个Blogs::Active控制器。

我在_form.html.erb中有以下内容用于为博客创建新草稿。它适用于创建新记录,但它不适用于更新现有记录:

# app/views/blogs/new_drafts/_form.html.erb
<%= form_for @blog, url: :blogs_new_drafts  do |f| %>
  ...
<% end %>

当我去更新草稿时,会抛出此错误:

  

没有路线匹配[PATCH]&#34;博客/ new_drafts&#34;

我无法弄清楚为什么我在这里更新时会出现路由错误,因为当我运行rake routes时,它确实有一条PATCH路由到blogs/new_drafts#update

1 个答案:

答案 0 :(得分:1)

更改您的网址:

<%= form_for @blog, url: :blogs_new_draft(@blog)  do |f| %>
  ...
<% end %>

您的创建操作的网址与更新不同。更新操作URL需要知道您尝试更新的博客。

也就是说,如果您尝试与_formnew观点分享edit,那么只有一个form无法使用,因为您是提供这两个操作之间不同的自定义URL。有哪些方法可以使它工作(将URL传递给部分/实例化控制器中的URL作为变量/将表单标记直接添加到新的/编辑视图/等),但是需要做些什么完成。