Ruby on Rails - params上的禁用属性?

时间:2014-07-07 02:11:30

标签: ruby-on-rails ruby attributes

我试图在点击某个按钮后重定向某个人并且我一直收到以下错误:

::加载ActiveModel ForbiddenAttributesError

提取的来源(第20行):

它在@post = Post.new行上抛出错误。

def create   
@post = Post.new(params[:post])

if @post.save
 redirect_to posts_path, :notice => "Your post was saved"

我对Ruby很新,目前我对这意味着什么很困惑。我只是按照教程,我的工作不起作用。如果有人能提供帮助那就太棒了:D

2 个答案:

答案 0 :(得分:3)

@post = Post.new(params[:post]) 

...不再用于最新版本的rails。问题是它提供的安全性很弱。正在更新其用户配置文件的人(例如)理论上可以插入一个属性,如" administrator:true"将自己更改为管理员(如果存储管理员标志的方式)

强参数现在要求您明确指定要输入的属性。

所以现在我们做......

@post = Post.new(post_params)

我们稍后在控制器中有一个方法来指定允许的属性,看起来像......

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

答案 1 :(得分:1)

虽然我没有足够的代码专门回答这个问题,但我可能会非常接近(减去一些列/属性命名)。现在strong_params是Rails应用程序的标准,你可能希望做更多的事情:

def create   
  @post = Post.new(post_params)

  if @post.save
    redirect_to posts_path, :notice => "Your post was saved"
  else
    #other stuff here
  end
end

private
def post_params
  params.require(:post).permit(:content, ....etc) #I took a guess at the attributes you are passing through your params on the create.
end

有关历史/原因的一点额外简单阅读:http://blog.8thlight.com/will-warner/2014/04/05/strong-parameters-in-rails.html

如果您需要任何其他说明,请与我们联系。