Мне нужно перебирать записи, найденные с помощью sql, и обновлять их все.ruby итерация по sql-результатам
Мне нужно обновить несколько тысяч записей, а требования достаточно сложны, и я ищу записи по SQL. Код ниже работает, но есть ли способ сделать это, не выполняя несколько тысяч операторов обновления?
users = User.find_by_sql "select e.id from users e inner join accounts a on a.id = e.account_id where e.account_id not in (1955,3083, 3869)"
users.each do |user|
u = User.find(user.id)
if u
u.update_attribute(:last_name, 'X')
end
end
Не могли бы вы указать, используете ли вы Mysql, SQLite и т. Д.? И ваша версия Rails/Ruby? – onebree
Непонятно, зачем вам «find_by_sql» здесь. 'User.joins (: accounts) .where ('users.account_id NOT IN (?)', [1955, 3083, 3869])' будет генерировать тот же запрос. –
Привет Onebree. Использование Ruby 2, Rails 3.2 и mysql –