2011-12-06 9 views
1

が、私はそうのように、すでに定義されたモデルからのデータを選択するために、SQLを呼び出す方法を知っているモデルによって定義されていないオブジェクトを返しますモデルで定義されていない情報が必要ですか?SQLの呼び出しは、

私は食事テーブル、フレンドテーブル、およびコンポーネントテーブルを持っています。コンポーネントが食事を構成し、フレンズがコンポーネントにアレルギーを起こすことがあります。私はSQLコマンドを持っています(機密理由のためにここに投稿できませんが、実装はそれとは関係ありません)、食事を与えられたfriend_idとcomponent_idを返します。つまり、どのフレンズが特定の食事のどのコンポーネントにアレルギーを発しているかを教えてくれる行のリスト(各2つの列、friend_idおよびcomponent_id)を返します。しかし、私はこれをRubyの変数に格納し、その情報にアクセスする方法を知らない。あなたは私が何をしたいのかのアイデアを与えるためにいくつかの擬似コードを与えること

@allergies_for_a_meal = ....<INSERT SQL QUERY HERE>... 
@friends_who_are_allergic = Friends.find_by_id(@allergies_for_a_meal.friend_id) 

は、誰かが私にこのための適切な構文のアイデアを与えることはできますか?

答えて

0

ActiveRecord::Baseサブクラス(モデルなど)の中にいる場合は、現在のデータベース接続にはconnectionでアクセスできます。 connectionselect_rowsのような便利なメソッドがあります。

a = connection.select_rows('select id from ...').map { |r| r[0].to_i } 

あなたはモデルクラスの内部ではない場合、あなたが本当に直接データベースをいじりすべきではありませんが、あなたがしなければならない場合は、あなたがActiveRecord::Base.connectionを使用することができます。

+0

ありがとうございました。 a.friend_idは期待どおりに動作しますか? – varatis

+0

@varatis:いいえ、 'a'にはFixnumsだけが含まれています。モデルインスタンスやそれ以外の複雑なものは含まれていません。 –

+0

さて、どうすればそれらにアクセスできますか?申し訳ありませんが、私はRubyの初心者です。 – varatis

0

データベースにSQLビューを作成し、そこからデータを読み取るための読み取り専用のActiveRecordモデルを作成できます。

その方法:

  • あなたの複雑なSQLは、DBMSに格納されている(一度だけ解析され)ています。
  • あなたは
  • あなたには、いくつかの見解をに応じて、そこに書き込むことができることを

注ビューのSQLへの制約を追加追加検索することができ、データにアクセスするために、通常のActiveRecordのアクセサとファインダーのすべてを使用することができますビューのSQL、DBMS、エンジンなどですが、私はそれに反対することをお勧めします。

関連する問題