如何在自定义路由中使用form_for?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在自定义路由中使用form_for?相关的知识,希望对你有一定的参考价值。
自定义路由:
resources :blog, controller: 'posts'
如何重写此行<%= simple_form_for(@post, blog_path) do |f| %>
以摆脱以下错误?
TypeError in Posts#edit
ActionView::Template::Error (no implicit conversion of Symbol into Integer)
我也尝试了<%= simple_form_for(blog_path(@post)) do |f| %>
,它摆脱了错误,但如果我想编辑表单,输入将清空他们保存的数据。
posts_controller
def new
@post = Post.new
respond_with(@post)
end
def edit
end
def create
@post = Post.new(post_params)
if current_user.admin
@post.save
respond_with(@post)
else
flash[:success] = 'Get out of here.'
redirect_to root_url
end
end
答案
它可以采用哈希选项,包括url,所以像这样:
编辑:将blog_path
更改为blogs_path
。 blog_path
是show动作,而不是创建动作,因此需要一个id(并且无论如何都不是帖子路径)。试试这种方式。
<%= simple_form_for(@post, url: blogs_path) do |f| %>
另一答案
不知道这是否适用,但是前几天发现的一个非常酷的功能是.becomes
- 您可以在其中更改对象的“类”,以便Rails以不同的方式处理它:
这可以与Action Pack中的记录标识一起使用,以允许客户<公司执行诸如渲染部分:
@client.becomes(Company)
之类的操作,以使用公司/公司部分而不是客户端/客户端来呈现该实例。
所以...
如果你有一个Blog
模型,并希望每个@post
都被这样对待(再次,我不知道这是否是你的设置),你可以做以下事情:
<%= simple_form_for @post.becomes(Blog) do |f| %>
如果不合适,我会删除;它对我来说非常方便。
更新
如果您希望自己的posts_path
成为博客(IE url.com/blog/1
),那么您需要查看路由生成器使用path
选项:
#config/routes.rb
resources :posts, path: "blog", as: :blog # -> url.com/blogs/2
以上是关于如何在自定义路由中使用form_for?的主要内容,如果未能解决你的问题,请参考以下文章