0

これをどう表現するかはよくわかりませんが、試してみます。

基本的に、メッセージとイベントの2つのモデルがあります。

メッセージbelongs_toイベントおよびイベントhas_manyメッセージ。

私が次のようなものを呼ぶとき:

Event.first.messages

次の出力が生成されます。

SELECT "messages".* FROM "messages" WHERE "messages"."event_id" = 1

私ができるようにしたいのは、2つの間の関連付けを維持することですが、has_many方程式に別の列を追加して、生成されるSQLが次のようになるようにします。

SELECT "messages".* FROM "messages" WHERE "messages"."event_id" = 1 OR "messages"."type_id" = 4

メッセージテーブルとイベントテーブルの両方にtype_id列が含まれている場合。

これは可能ですか?

4

3 に答える 3

1

純粋な ActiveRecord OR クエリを作成することはできません

これを解決する他の方法

where 引数として SQL 文字列を使用します。

Message.where("event_id = ? or type_id = ?", Event.first.id, 4)

2 つのクエリを作成し、それらを追加します。

event_messages = Event.first.messages
type_messages = Message.where(:type_id => 4)
all_messages = event_messages + type_messages

生の SQL:

Railsで動的バインディングを使用して生の更新SQLを実行する方法

于 2013-01-15T11:16:55.103 に答える
0

これを試して

Event.first.find(:all, :conditions => ["where type_id = ? or event_id = ?", 4, 1])
于 2013-01-15T11:09:46.217 に答える
0

はい、可能です

Event.first.messages.where(:type_id => 4)

それを試してみてください

于 2013-01-15T11:01:18.840 に答える