将不在模型属性中的参数列入白名单
问题描述:
我试图传递一些不属于模型属性一部分的额外属性。将不在模型属性中的参数列入白名单
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
不是表中的字段,那么您绝对不会更新它。它没有任何意义。因此,您不需要将其添加到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
所以你的意思是我不需要在白名单中包含这些参数? – gazubi
是的,你可以,如果它的值是一个字符串或数组。只有当值是散列值时才是危险的。 你能说出你用这个值做什么吗? –