小编Dmi*_*tri的帖子

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

我正在开发一个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.

ruby ruby-on-rails mass-assignment strong-parameters

5
推荐指数
1
解决办法
1201
查看次数

将参数提供给&块

如果我们在集合上有一个方法,该方法采用一个块,而在每个元素上执行了另一个方法,则可以使用&符号将其写得更短。例如:如果我们有一个整数数组,并且想要删除奇数,我们可以这样做:

[1,2,3,4,5,6,7,8].reject {|x| x.odd?}
Run Code Online (Sandbox Code Playgroud)

使用与号,我们可以这样写:

[1,2,3,4,5,6,7,8].reject(&:odd?)
Run Code Online (Sandbox Code Playgroud)

假设我们有一个字符串数组,并且想要删除包含的元素'a'。我们可以这样编写解决方案:

['abc','cba','cbc','cdc','dca','cad','dc','cc].reject {|x| x.include? 'a'}
Run Code Online (Sandbox Code Playgroud)

我们如何使用与号语法编写此代码(如果可能)?

ruby methods proc

3
推荐指数
1
解决办法
343
查看次数