Помогите с Join в Rails 3 - PullRequest
       2

Помогите с Join в Rails 3

3 голосов
/ 25 ноября 2010

У меня есть следующие модели:

class Event < ActiveRecord::Base
  has_many :action_items
end

class ActionItem < ActiveRecord::Base
  belongs_to :event
  belongs_to :action_item_type
end

class ActionItemType < ActiveRecord::Base
  has_many :action_items
end

И что я хочу сделать для данного события, найти все элементы действия, которые имеют тип элемента действия с именем «foo» (например). Поэтому я думаю, что SQL будет выглядеть примерно так:

SELECT * FROM action_items a
INNER JOIN action_item_types t
ON a.action_item_type_id = t.id
WHERE a.event_id = 1
AND t.name = "foo"

Может кто-нибудь помочь мне перевести это в хороший запрос активной записи? (Рельсы 3 - Арель)

Спасибо!

Ответы [ 3 ]

8 голосов
/ 25 ноября 2010

Ну, я думаю, что решил это сам. Вот что я сделал

e = Event.find(1)
e.action_items.joins(:action_item_type).where("action_item_types.name = ?", "foo")
4 голосов
/ 19 ноября 2012

Эмм, почему бы не определить

has_many :action_item_types, :through => :action_items

и обратитесь к

e.action_item_types.where(:name => "foo")

1 голос
/ 31 декабря 2010

или (если «имя» является уникальным именем столбца)

e.action_items.joins(:action_item_type).where(:name => "foo")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...