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.