2013-01-15 61 views
0

我不太確定如何說出這個,但我會給它一個鏡頭。Rails has_many複雜的查詢

基本上我有兩個模型:消息和事件。

消息belongs_to事件和事件has_many消息。

當我打電話是這樣的:

Event.first.messages 

它產生這樣的輸出:

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

我想做什麼就能做的是保持兩者之間的關聯,但另增加一列進入has_many方程,所以生成的SQL如下所示:

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

其中兩個e消息和事件表包含一個type_id列。

這可能嗎?

回答

1

你不能讓純粹的ActiveRecord或查詢

其他辦法來解決這個

使用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:

How to execute a raw update sql with dynamic binding in rails

0

是它可以通過使用

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

試試吧

+1

這創建一個AND子句,即q問題是關於一個OR。據我所知,OP希望看到所有直接由ID關聯的消息或者type_id = 4(並且在這種情況下忽略event_id) –

+0

正確,如果有匹配的type_id,則忽略event_id。 – jay

0

試試這個

Event.first.find(:all, :conditions => ["where type_id = ? or event_id = ?", 4, 1])