我有一个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
答案 0 :(得分:1)
更改您的网址:
<%= form_for @blog, url: :blogs_new_draft(@blog) do |f| %>
...
<% end %>
您的创建操作的网址与更新不同。更新操作URL需要知道您尝试更新的博客。
也就是说,如果您尝试与_form
和new
观点分享edit
,那么只有一个form
无法使用,因为您是提供这两个操作之间不同的自定义URL。有哪些方法可以使它工作(将URL传递给部分/实例化控制器中的URL作为变量/将表单标记直接添加到新的/编辑视图/等),但是需要做些什么完成。