Rails 4,参数错误未知密钥,更新控制器

时间:2013-10-14 23:53:01

标签: ruby-on-rails ruby ruby-on-rails-4 slim-lang

尝试编辑帖子时收到错误:

发布#edit controller:

def edit
 @post = Post.find params[:id]
end

发布#update controller:

def update
 @post = Post.find params[:post]

 if @post.update_attributes params[:post]
  redirect_to posts_path
 else
  render 'edit'
 end
end

修改视图

h1 Edit Post
= form_for @post do |f|
 p
  = f.label :title
  = f.text_field :title
 p
  br
 p
  = f.label :content
  = f.text_area :content
 p
  br
 p
  = f.submit 'Update Post'
 p
  br

这是我在PostsController#update,Unknown Key:title 错误中得到 ArgumentError的时候。我仍然围绕着Rails 4中的强参数概念,所以它可能与此有关......任何想法?

2 个答案:

答案 0 :(得分:2)

尝试以下内容我希望它能为您提供帮助。

def update
  @post = Post.find(params[:id])
  if @post.update(post_params)
    redirect_to @post
  else
    render 'edit'
  end
end

答案 1 :(得分:0)

我将帖子#update controller更新为

params[:id]

而不是

params[:post]

此修复程序带来了由

引起的 ForbiddenAttributesError
if @post.update_attributes params[:post]

这是由于Rails 4引入的强参数概念......我通过替换

来解决这个问题
params[:post]

具有强大的参数

post_params

来自私有方法post_params

 private
  def post_params
   params.require(:post).permit(:title, :content)
 end

最终解决了未知密钥错误:title