Как я могу элегантно соединить два рельса запросов? - PullRequest
1 голос
/ 22 сентября 2011

У меня есть следующий модельный объект:

#<Insight id: 155, endorse_id: 15, supporter_id: 15, created_at: "2011-09-22 02:27:50", updated_at: "2011-09-22 02:27:50">

Где у Endorse есть много идей, а у Supporter много идей.

Я могу запросить БД следующим образом:

Endorse.find (15) .insights.count

Insight.find_all_by_supporter_id (15) .count

Как я могу элегантно объединить оба этих запроса в один, где я могу искать все идеи, созданные Endorse 15 и Supporter 15?

Ответы [ 3 ]

2 голосов
/ 22 сентября 2011
Rails2:

insight_count = Insight.count(:conditions => {:supporter_id => 15, endorse_id => 15})
insights      = Insight.all(:conditions => {:supporter_id => 15, endorse_id => 15})

Rails3:

insight_count = Insight.where(:supporter_id => 15, endorse_id => 15).count
insights      = Insight.where(:supporter_id => 15, endorse_id => 15).all     
1 голос
/ 22 сентября 2011

Попробуйте это

Для Rails 3.0.x и, вероятно, 3.1

Endorse.find(15).insights.find_all_by_supporter_id(15).count

Для Rails 2.3.x

Endorse.find(15).insights.find_all_by_supporter_id(15).length
0 голосов
/ 22 сентября 2011

Я не уверен, что вы захотите объединить их в цепочку, поскольку каждый из них представляет собой отдельный запрос.Если бы между ними были отношения, тогда это имело бы смысл для меня.Например, если в Endorse содержались идеи, содержащие сторонников.

...