自定义路由:
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
答案 0 :(得分:4)
它可以采用哈希选项,包括url,所以像这样:
修改:将blog_path
更改为blogs_path
。 blog_path
是show动作,而不是创建动作,因此需要一个id(并且无论如何都不是帖子路径)。以这种方式尝试。
<%= simple_form_for(@post, url: blogs_path) do |f| %>
答案 1 :(得分:0)
不知道这是否适用,但我前几天发现的一个非常酷的功能是.becomes
- 您可以在其中更改对象的“类”,以便Rails以不同的方式处理它: / p>
这可以与Action Pack中的记录标识一起使用,以允许例如Client&lt;公司要做一些像渲染部分:
@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