Изменение возвращаемого значения find_by_sql
Так что я перетягиваю волосы над этим вопросом. В основном я использовал find_by_sql для извлечения данных из моей базы данных. Я сделал это, потому что в запросе много столбцов и объединений таблиц, и я думаю, что использование ActiveRecord и ассоциаций замедлит его.
Мне удалось получить данные, и теперь я хотел изменить возвращаемые значения. Я сделал это, просматривая результат, например.
a = Project.find_by_sql("SELECT mycolumn, mycolumn2 FROM my_table").each do |project|
project['mycolumn'] = project['mycolumn'].split('_').first
end
Я узнал, что project['mycolumn']
не был изменен вообще.
Итак, мой вопрос:
Есть ли find_by_sql
вернуть массив Хеши? Можно ли изменить значение одного из атрибутов хэша, как указано выше?
Вот код: http://pastie.org/4213454. Если вы можете взглянуть на summarize_roles2()
вот где происходит действие.
Спасибо. Я использую Rails 2.1.1 и Ruby 1.8. Я не могу обновиться из-за устаревших кодов.
2 ответа
Ты пытался
a = Project.find_by_sql("SELECT mycolumn, mycolumn2 FROM my_table").each do |project|
project['mycolumn'] = project['mycolumn'].split('_').first
project.save
end
Просто измените метод выше, чтобы получить доступ к значениям, распечатать значение проекта, и вы можете четко проверить свойство объекта.
The results will be returned as an array with columns requested encapsulated as attributes of the model you call this method from.If you call Product.find_by_sql then the results will be returned in a Product object with the attributes you specified in the SQL query. If you call a complicated SQL query which spans multiple tables the columns specified by the SELECT will be attributes of the model, whether or not they are columns of the corresponding table.
Post.find_by_sql "SELECT p.title, c.author FROM posts p, comments c WHERE p.id = c.post_id"
> [#<Post:0x36bff9c @attributes={"title"=>"Ruby Meetup", "first_name"=>"Quentin"}>, ...]
Источник: http://api.rubyonrails.org/v2.3.8/