带有Rails 4的ActiveModel :: ForbiddenAttributesError

时间:2014-03-31 03:50:24

标签: ruby-on-rails ruby

我在跟踪rails教程时遇到了错误。经过一些研究,将@post = Post.new(params[:post])更改为@post = Post.new(post_params)解决了我的问题,但我仍然不太了解原因。是什么造成了不同?为什么我可以在params[:id]中使用show

我的posts_controller.rb:

class PostsController < ApplicationController
  def new
  end

  def create
    @post = Post.new(post_params)
    @post.save
    redirect_to @post
  end

  def show
    @post = Post.find(params[:id])
  end

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

1 个答案:

答案 0 :(得分:0)

答案很简单,当您尝试创建或编辑记录时,会应用强参数系统。因此,即使使用未经许可的参数,show动作中的简单SELECT / find也能正常工作。 但是,您必须在控制器中为每个INSERT或UPDATE操作显式允许参数。这就是你对params.require(:post).permit(:title, :text)所做的。您已经说过,如果:post one存在,则允许使用标题和文本参数。