Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails 3: Retrieve all child records where parent model attribute equals search key

I want to do a query that returns only the assets that do not have a serial number where the workorder branch equals a number.

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

So I want a hash of :assets where the assets.workorder.branch="350". I think I could do a loop and create the hash that way but should I be able to do this in a query? Should I be trying to use scopes for this?

**Update

This is what I ended up using. Worked great.

@assets = Asset.joins(:workorder).where('workorders.branch=350').order('workorders.wo_date ASC')
like image 346
Jason Crump Avatar asked Sep 16 '12 17:09

Jason Crump


1 Answers

The query you would want to do is

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

So you can make a scope like this:

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

If you're going to be looping through the workorders, you should change the joins to includes as this eager loads them.

The rails guide to queries is very helpful for this sort of thing http://guides.rubyonrails.org/active_record_querying.html

like image 164
Edward Avatar answered Oct 24 '22 23:10

Edward