Изменение возвращаемого значения 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/

Другие вопросы по тегам