2012-01-18 2 views
0

У меня есть один счет-фактура; счет-фактура относится к отгрузке. Таблица отправлений - та, которая содержит customer_id.Rails 3. Как сделать вложенный запрос атрибута?

Мне нужно найти все счета-фактуры ...

  • для конкретного клиента и
  • , которые имеют customer_account_balance от 0

Я пробовал много различных подходов, но ни один не кажется, работают, этот последний получил мне ошибку private method select или что-то в этом роде ...

reports_controller.rb 
i = Invoice.where("customer_open_balance != 0") 
s = Shipment.find_by_customer_id(@customer.id) 
shipment_ids_from_invoices = i.map{|x| x.shipment_id} 
@shipments = s.select{|z| shipment_ids_from_invoices.include? z.id} 

ответ

1

Это работает?

@shipments = Shipment.joins(:invoice).where(:customer_id => @customer.id).where("customer_account_balance <> 0") 

Это звучит как схема выглядит следующим образом:

Shipment: (customer_id, ...) 
Invoice: (customer_open_balance, shipment_id, ...) 

ли вы положили has_one :invoice в Shipment.rb и belongs_to :shipment в Invoice.rb?

+0

Awesome! он работает. Спасибо – leonel

1
class Invoice 

    belongs_to :shipment 

    scope :with_customer, lambda { |customer_id| joins(:shipment).where(:customer_id => customer_id) } 

    scope :cero_balance, joins(:shipment).joins(:customer).where("customer_account_balance <> 0") 

end 

Тогда попробуйте

#for a particular customer with id 1 
Invoice.with_customer 1 

#that have customer_account_balance of 0 
Invoice.cero_balance 
+0

Это дает мне некоторые ошибки, но мне нравится подход создания области. Думаю, я объединю ответы. Благодаря! :) – leonel

Смежные вопросы