2012-09-16 14 views
8

Deseo realizar una consulta que devuelva solo los activos que no tienen un número de serie donde la rama de orden de trabajo es igual a un número.Rieles 3: Recupere todos los registros secundarios donde el atributo del modelo principal es igual a la clave de búsqueda

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 

así que quiero un hash de: activos donde el assets.workorder.branch = "350". Creo que podría hacer un bucle y crear el hash de esa manera, pero ¿debería ser capaz de hacer esto en una consulta? ¿Debería tratar de usar ámbitos para esto?

** Actualización

Esto es lo que terminé usando. Funcionó muy bien.

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

Respuesta

17

La consulta que se quiere hacer es

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

Por lo que puede hacer un alcance de esta manera:

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

Si vas a ser un bucle a través de las órdenes de trabajo, deberías cambiar las uniones a includes ya que este impaciente las carga.

los carriles de guía a las consultas es muy útil para este tipo de cosas http://guides.rubyonrails.org/active_record_querying.html

+0

Gracias! Funcionó perfecto –

+0

Me alegra oír eso. Debe aceptar la respuesta haciendo clic en la marca de la izquierda ... – Edward

Cuestiones relacionadas