你如何在Rails 4中访问params [:model] [:field]?

时间:2014-05-29 18:15:00

标签: ruby-on-rails ruby-on-rails-4 strong-parameters

据我所知......

  • 如果您有form_for @model,则在提交表单时可以使用params[:model]。此外,如果表单包含2个属性attr1attr2,则在提交表单时可以使用params[:model][:attr1]params[:model][:attr2]
  • 在Rails 4中,您应该编写一个名为model_params的方法params.require(:model).permit(:attr1, :attr2)
  • 然后您就像model_params一样使用Model.new(model_params)

但是,如果您只需要表单中的一个字段,您会怎么做?就像你只需要params[:model][:attr1]

一样

示例:

def create
  @user = User.new(user_params)
  if @user.save
    # need access to params[:user][:password] here
    redirect_to root_url, :notice => "Signed up!"
  else
    render :new
  end
end

private

    def user_params
        params.require(:user).permit(:email, :password, :password_confirmation)
    end

1 个答案:

答案 0 :(得分:1)

负责此行为的gem是strong_parameterspermit()方法根据传递给它的属性决定传递给模型的内容。

在您的情况下,您通过了:attr1:attr2

params.require(:model).permit(:attr1, :attr2)

这意味着模型将attr1attr2设置为从表单传递的任何值。

如果您只想设置attr1,请从attr2来电中删除permit()

params.require(:model).permit(:attr1)

您的模型不会设置attr1,但不会设置attr2。就这么简单。

你甚至可以通过一个没有争论的方式调用permit!来允许一切(不推荐)。

您可以在the gem's Github project page上了解有关此行为的更多信息。

根据OP编辑

进行更新

如果您需要访问控制器中的params[:user][:password] ......那么您只是在示例中访问了它。您可以通过键入params[:user][:password]来访问它。

没有什么能阻止您直接访问params哈希。 strong_parameter的工作是阻止您向模型大量分配哈希,这就是全部。