当我们只更新一个属性时,我们应该使用强对数吗?

Dmi*_*tri 5 ruby ruby-on-rails mass-assignment strong-parameters

我正在开发一个Rails应用程序,我有几个动作(#delete_later,#ban_later等),其中我只从请求参数设置一个属性(具体来说,是reason执行该操作的字段).

我想知道是否可以这样做:

def ban_later
  @object.reason = params[:object][:reason]
  @object.save
end
Run Code Online (Sandbox Code Playgroud)

或者即使在这种情况下使用强对数也是最佳做法?

def ban_later
  @object.reason = object_params[:reason]
  @object.save
end

private
  def object_params
    params.require(:object).permit(:permitted_1, :permitted_2, :reason)
  end
Run Code Online (Sandbox Code Playgroud)

哪种解决方案最好?如果没有,那么问题的最佳解决方案是什么?

后来编辑:

#ban_later,#delete_later动作确实可以设置一个标志列,status但是可以在不从params散列中接收它的值的情况下完成.由于您只为每个方法设置一个状态,因此当您在#delete_later时可以设置状态"pending_delete",当您在#ban_later时,可以设置"pending_ban"状态.

稍后编辑

为什么使用#save而不是update_attributes直接?假设您需要if @object.save发表声明.在false分支(对象未保存)上,您可能仍希望呈现使用其内容的视图@object.

lul*_*ala 1

第一个节省了计算量。

第二个检查 :object 子哈希是否存在,我认为这有利于容错。

我一开始会选择第一个,但经过一番思考后,我更喜欢第二个。