9

我想做一个查询,只返回没有序列号的资产,其中工作订单分支等于一个数字。

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')
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 回答