Rails 强参数:允许控制器中的参数
Rails Strong Parameters: Permit a param in controller
我有一个用户模型,作为内部字段说 some_internal_id
。我不希望外部用户能够输入它(通过批量分配)。理想情况下,我不应该在 user_params
函数中允许它。
理想情况:
Create 方法分配内部参数,如下所示:
def create
user_params[:some_internal_id] = rand(100)
@user = User.new(user_params)
@user.save
end
# Never trust parameters from the scary internet, only allow the white list through.
# No need to permit some_internal_id param here
def user_params
params.require(:user).permit(:name, :age)
end
上面的代码抛出 Unpermitted parameter: some_internal_id
错误。
以下是可行的,但看起来有点老套
以下解决了我正在尝试做的问题,但看起来不是很干净的方法:
def create
@user = User.new(user_params)
@user.save
end
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params[:user][:some_internal_id] = rand(100)
params.require(:user).permit(:some_internal_id, :name, :age)
end
有没有更好的方法允许我在创建方法中设置参数 - 靠近对象的保存位置?
只需在保存之前手动分配您的内部参数:
def create
@user = User.new(user_params)
@user.some_internal_id = rand(100)
@user.save
end
要将其写为 1 调用,您可以使用 User.create
块语法:
@user = User.create(user_params) do |user| # first, assign these attributes
user.some_internal_id = rand(100) # then yield user to the block
end # and, finally, save
我通常将额外的属性合并到参数中 after the strong parameter permit
s:
@user = User.new user_params.merge(some_internal_id: rand(100))
我有一个用户模型,作为内部字段说 some_internal_id
。我不希望外部用户能够输入它(通过批量分配)。理想情况下,我不应该在 user_params
函数中允许它。
理想情况:
Create 方法分配内部参数,如下所示:
def create
user_params[:some_internal_id] = rand(100)
@user = User.new(user_params)
@user.save
end
# Never trust parameters from the scary internet, only allow the white list through.
# No need to permit some_internal_id param here
def user_params
params.require(:user).permit(:name, :age)
end
上面的代码抛出 Unpermitted parameter: some_internal_id
错误。
以下是可行的,但看起来有点老套
以下解决了我正在尝试做的问题,但看起来不是很干净的方法:
def create
@user = User.new(user_params)
@user.save
end
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params[:user][:some_internal_id] = rand(100)
params.require(:user).permit(:some_internal_id, :name, :age)
end
有没有更好的方法允许我在创建方法中设置参数 - 靠近对象的保存位置?
只需在保存之前手动分配您的内部参数:
def create
@user = User.new(user_params)
@user.some_internal_id = rand(100)
@user.save
end
要将其写为 1 调用,您可以使用 User.create
块语法:
@user = User.create(user_params) do |user| # first, assign these attributes
user.some_internal_id = rand(100) # then yield user to the block
end # and, finally, save
我通常将额外的属性合并到参数中 after the strong parameter permit
s:
@user = User.new user_params.merge(some_internal_id: rand(100))