Rails 3: Получить все дочерние записи, где атрибут родительской модели равен ключу поиска
Я хочу сделать запрос, который возвращает только активы, которые не имеют серийный номер, где ветвь рабочего порядка равна числу.
class Workorder < ActiveRecord::Base
belongs_to :user
has_many :assets
scope :current_branch, where("branch=350").order("wo_date ASC")
end
class Asset < ActiveRecord::Base
belongs_to :workorder
scope :needs_serial, :conditions => {:serial => ""}
end
class AssetsController < ApplicationController
def index
@assets_needing_serial=???
end
end
Поэтому я хочу хэш:assets, где assets.workorder.branch="350". Я думаю, что я мог бы сделать цикл и создать хэш таким образом, но я должен быть в состоянии сделать это в запросе? Должен ли я пытаться использовать области для этого?
**Обновить
Это то, что я в конечном итоге использовал. Работал отлично.
@assets = Asset.joins(:workorder).where('workorders.branch=350').order('workorders.wo_date ASC')
1 ответ
Запрос, который вы хотели бы сделать, это
Asset.joins(:workorder).where('workorders.branch = 325')
Таким образом, вы можете сделать область видимости следующим образом:
scope :with_workorder_branch, lambda { |branch| joins(:workorder).where('workorders.branch = ?', branch) }
Если вы собираетесь циклически просматривать рабочие заказы, вам следует изменить объединения на включенные, так как это загружает их.
Руководство по рельсам очень полезно для такого рода вещей http://guides.rubyonrails.org/active_record_querying.html