Является ли метод обновления Active Record Base устаревшим? - PullRequest
0 голосов
/ 24 июля 2011

Я пытаюсь обновить много активных записей одновременно, используя метод: 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_ship_order_line_items] возвращает следующий хеш:

{"11" => {"available" => "1"}, "2" => {"available" => "1"}}

Но модели не кажутсяобновить правильно ... кто-нибудь с внутренностями?

1 Ответ

1 голос
/ 24 июля 2011

AFAIK вы не можете обновлять такие модели на рельсах, вам придется сделать это следующим образом:

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

EDIT

Возможно, где-то в вашем коде есть вызов attr_protected, вы должны проверить, какие атрибуты там защищены или нет.

Если вы считаете, что можете безопасно проигнорировать защиту на этом конкретном вызове, вы можете использовать некоторую отправку, чтобы отработать магию (отказ от ответственности: это самостоятельно, я просто показываю возможность):

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    

Это преодолеет защиту атрибутов, но вы должны убедиться, что это безопасный вызов, и вы не собираетесь обжечь себя, выполнив .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...