繁体   English   中英

具有多个状态的资源的Form_for命名空间路由

[英]Form_for namespaced route for a resource with multiple states

我有一个具有不同状态的Blog模型。 为了保持控制器的瘦身,并遵循每个控制器仅具有CRUD操作的约定,我遵循DHH的命名空间控制器模式,并命名了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]“ blogs / new_drafts”

我在弄清楚为什么在这里更新时为什么会说存在路由错误,因为我在运行rake routes时确实有一个PATCH路由到blogs/new_drafts#update

更改您的URL:

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

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

就是说,如果您尝试与new视图和edit视图共享_form ,则无法使用单个form ,因为您提供的自定义URL在这两个操作之间会有所不同。 有一些方法可以使它起作用(将URL传递到部分视图中/将URL作为变量实例化在控制器中/将form标签直接添加到新视图/编辑视图中/等),但是需要做一些事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM