0

だから私はこの問題/落とし穴に髪を引っ張っています。基本的に、データベースからデータを取得するために 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 を使用しています。古いコードのため、実際にはアップグレードできません。

4

2 に答える 2

0

上記のメソッドを変更して値にアクセスし、プロジェクトの値を出力すると、オブジェクトのプロパティを明確に確認できます。

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/

于 2012-07-07T04:05:59.020 に答える
0

やってみました

a = Project.find_by_sql("SELECT mycolumn, mycolumn2 FROM my_table").each do |project|
  project['mycolumn'] = project['mycolumn'].split('_').first
  project.save
end
于 2012-07-07T13:29:26.457 に答える