Ruby on rails 活动记录基更新方法是否已弃用?

Ruby on rails 活动记录基更新方法是否已弃用?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我试图使用:update方法同时更新许多活动记录,但它们似乎更新得不好 @drop_ship_order_line_items = DropShipOrderLineItem.update(params[:drop_ship_order_line_items].keys, params[:drop_ship_order_line_items].values).reject { |dsoli| dsoli.errors.empty? } params[:drop\u ship\u order\u

我试图使用:update方法同时更新许多活动记录,但它们似乎更新得不好

@drop_ship_order_line_items = DropShipOrderLineItem.update(params[:drop_ship_order_line_items].keys, params[:drop_ship_order_line_items].values).reject { |dsoli| dsoli.errors.empty? }
params[:drop\u ship\u order\u line\u items]
返回以下散列:

{“11”=>{“可用”=>“1”},“2”=>{“可用”=>“1”}


但是模型似乎没有正确更新…有内部人员吗?

AFAIK您不能在rails上这样更新模型,您必须这样做:

params[:drop_ship_order_line_items].each do |key,value|
    DropShipOrderLineItem.find( key ).update_attributes( value )  
end
编辑

代码中可能有一个attr_protected调用,您应该检查其中哪些属性受保护或不受保护

如果您认为您可以安全地忽略此特定呼叫的保护,您可以使用一些发送do out the magic(免责声明:这是您自己的,我只是在展示一种可能性):


这将克服属性保护,但你应该确保这是一个安全的调用,并且你不会因为这样做而自焚

出于某种奇怪的原因,我只能像不允许任何批量更新一样使用update\u属性。好吧,编辑以添加一个跳过属性保护的解决方案。
params[:drop_ship_order_line_items].each do |key,value|
    ship = DropShipOrderLineItem.find( key )
    value.each do |property,value|
        ship.send( "#{property}=", value )
    end
    ship.save
end