将不在模型属性中的参数列入白名单

whitelisting params that are not in the model attributes

我正在尝试传递一些不属于模型属性的额外属性。

 def fulfillment_params
    params.require(:fulfillment).permit(
      :id, :ids, :batch_edit_fulfillment_ids, 
        :remarks,
    )
  end

我该如何正确执行此操作? batch_edit_fulfillment_ids 是我在我的一种表单中使用的字段,但是当我尝试执行 update(fulfillment_params) 操作时,rails 假定这是我模型中的字段之一并抛出一个模型中没有这样的字段的错误

尽量不要传给fulfillment_params
仅使用 params[:fulfillment][:batch_edit_fulfillment_ids]

如果 batch_edit_fulfillment_ids 不是 table 中的字段,那么您肯定不会更新它。它没有任何意义。所以你不需要在 whitelist 中添加它,因为你只将那些 attributes 可以被用户更新的列入白名单。

有关详细信息,请参阅:https://cbabhusal.wordpress.com/2015/10/02/rails-strong-params-whilisting-params-implementation-details/

在你的情况下,你可以参考 Alex 的回答,或者如果你想访问模型中的值,那么你可以设置它

class Fulfillment < ActiveRecord::Base
 attr_accessor :batch_edit_fulfillment_ids
end
# in controller you can set
@fulfillment.batch_edit_fulfillment_ids = params[:fulfillment][:batch_edit_fulfillment_ids]

试试这个方法:

def fulfillment_params
  hash = {}
  hash.merge! params.require(:fulfillment).slice(:id, :ids, :remarks) # model attributes
  hash.merge! params.slice(:batch_edit_fulfillment_ids) # non-model attributes
  hash
end