9

workorder ブランチが番号と等しいシリアル番号を持たない資産のみを返すクエリを実行したいと考えています。

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.workorder.branch="350" である :assets のハッシュが必要です。ループを実行してその方法でハッシュを作成できると思いますが、クエリでこれを実行できる必要がありますか? これにスコープを使用しようとする必要がありますか?

**アップデート

これが私が最終的に使用したものです。うまくいきました。

@assets = Asset.joins(:workorder).where('workorders.branch=350').order('workorders.wo_date ASC')
4

1 に答える 1

20

あなたがしたいクエリは

Asset.joins(:workorder).where('workorders.branch = 325')

したがって、次のようなスコープを作成できます。

scope :with_workorder_branch, lambda { |branch| joins(:workorder).where('workorders.branch = ?', branch) }

ワークオーダーをループする場合は、結合をインクルードに変更する必要があります。これは、このイーガーがそれらをロードするためです。

Rails のクエリ ガイドは、このような場合に非常に役立ちますhttp://guides.rubyonrails.org/active_record_querying.html

于 2012-09-16T21:00:51.950 に答える