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)
试试吧
答
试试这个
Event.first.find(:all, :conditions => ["where type_id = ? or event_id = ?", 4, 1])
这创建一个AND子句,即q问题是关于一个OR。据我所知,OP希望看到所有直接由ID关联的消息或者type_id = 4(并且在这种情况下忽略event_id) –
正确,如果有匹配的type_id,则忽略event_id。 – jay