Rails has_many复杂的查询

问题描述:

我不太确定如何说出这个,但我会给它一个镜头。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列。

这可能吗?

你不能让纯粹的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

是它可以通过使用

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

试试吧

+1

这创建一个AND子句,即q问题是关于一个OR。据我所知,OP希望看到所有直接由ID关联的消息或者type_id = 4(并且在这种情况下忽略event_id) –

+0

正确,如果有匹配的type_id,则忽略event_id。 – jay

试试这个

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