Rails 4:将属性插入参数

在Rails 3中,可以像这样在params中插入一个属性:

params[:post][:user_id] = current_user.id 

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

 post_params[:user_id] = current_user.id . . . . private def post_params params.require(:post).permit(:user_id) end 

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

在这里find答案。 而不是从控制器操作中插入属性,可以通过合并将其插入到params定义中。 扩展我以前的例子:

 private def post_params params.require(:post).permit(:some_attribute).merge(user_id: current_user.id) end 

除了@ 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 

作为这种情况的替代scheme,您可以通过scope来要求传递属性:

current_user.posts.create(post_params)