【问题标题】:Rails Strong Parameters: Permit a param in controllerRails 强参数:允许控制器中的参数
【发布时间】:2015-09-15 21:09:28
【问题描述】:

我有一个用户模型,它作为内部字段说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 错误。

以下工作,但看起来有点hacky

以下解决了我正在尝试做的事情,但看起来不是很干净的方法:

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

是否有更好的方法可以允许并在 create 方法中设置参数 - 靠近保存对象的位置?

【问题讨论】:

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


    【解决方案1】:

    只需在保存之前手动分配您的内部参数:

    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
    

    【讨论】:

      【解决方案2】:

      我通常将附加属性合并到参数中强参数permits:

      @user = User.new user_params.merge(some_internal_id: rand(100))
      

      【讨论】:

        猜你喜欢
        • 2019-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-14
        • 2013-09-14
        • 1970-01-01
        相关资源
        最近更新 更多