Rails 4:将属性插入Params

nul*_*ull 65 ruby-on-rails strong-parameters

在Rails 3中,可以将属性插入到params中,如下所示:

params[:post][:user_id] = current_user.id
Run Code Online (Sandbox Code Playgroud)

我试图在Rails 4中做类似的事情,但没有运气:

post_params[:user_id] = current_user.id

. . . .


private

  def post_params
    params.require(:post).permit(:user_id)
  end
Run Code Online (Sandbox Code Playgroud)

Rails忽略了这种插入.它不会抛出任何错误,它只是悄然失败.

nul*_*ull 137

这里找到答案.您可以使用合并将其插入到params定义中,而不是从控制器操作中插入属性.扩展我之前的例子:

private

  def post_params
    params.require(:post).permit(:some_attribute).merge(user_id: current_user.id)
  end
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我需要使用deep_merge,因为我的属性是嵌套的...... (4认同)

Num*_*ers 36

除了@ timothycommoner的答案之外,您还可以基于每个操作执行合并:

  def create
    @post = Post.new(post_params.merge(user_id: current_user.id))
    # save the object etc
  end

private
  def post_params
    params.require(:post).permit(:some_attribute)
  end
Run Code Online (Sandbox Code Playgroud)

  • 嘿,您将如何为嵌套资源执行此操作? (2认同)