据我所知......
form_for @model
,则在提交表单时可以使用params[:model]
。此外,如果表单包含2个属性attr1
和attr2
,则在提交表单时可以使用params[:model][:attr1]
和params[:model][:attr2]
。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
答案 0 :(得分:1)
负责此行为的gem是strong_parameters
。 permit()
方法根据传递给它的属性决定传递给模型的内容。
在您的情况下,您通过了:attr1
和:attr2
:
params.require(:model).permit(:attr1, :attr2)
这意味着模型将attr1
和attr2
设置为从表单传递的任何值。
如果您只想设置attr1
,请从attr2
来电中删除permit()
。
params.require(:model).permit(:attr1)
您的模型不会设置attr1
,但不会设置attr2
。就这么简单。
你甚至可以通过一个没有争论的方式调用permit!
来允许一切(不推荐)。
您可以在the gem's Github project page上了解有关此行为的更多信息。
如果您需要访问控制器中的params[:user][:password]
......那么您只是在示例中访问了它。您可以通过键入params[:user][:password]
来访问它。
没有什么能阻止您直接访问params哈希。 strong_parameter的工作是阻止您向模型大量分配哈希,这就是全部。