2015-10-05 39 views
0

我试图传递一些不属于模型属性一部分的额外属性。将不在模型属性中的参数列入白名单

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

我该如何正确地做到这一点? batch_edit_fulfillment_ids是我在其中一种形式中使用的字段,但是当我尝试执行update(fulfillment_params)操作时,rails会假定这是我的模型中的字段之一,并且引发错误,表明模型中没有此类字段

回答

0

尽量不要将它传递给fulfillment_params。使用params[:fulfillment][:batch_edit_fulfillment_ids]

+0

所以你的意思是我不需要在白名单中包含这些参数? – gazubi

+0

是的,你可以,如果它的值是一个字符串或数组。只有当值是散列值时才是危险的。 你能说出你用这个值做什么吗? –

1

如果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] 
1

试试这个方法:

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 
相关问题