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

Другие вопросы по тегам