2016-02-03 4 views
0

У меня есть то, что для вызова метода в модели из контроллера, где контроллер имеет активный записи отношение объектRails вызов метода на активной записи отношения

как

@paid_drivers = DriverInvoice.where(driver_id: current_affilate_company.drivers.pluck(:id)) 

, где я получил

>  <ActiveRecord::Relation [#<DriverInvoice id: 1, driver_id: 13, total_reservations: 2, total_from_reservations: 20.0, pay: 20.5, 
> discount_amount: 0.0, other_amount: 0.5, tax: 0.0, created_at: 
> "2016-02-03 05:14:56", updated_at: "2016-02-03 05:14:56", 
> payment_type: 1, is_other_addition: true, is_tax_per: true, tax_value: 
> nil>, #<DriverInvoice id: 2, driver_id: 56, total_reservations: 3, 
> total_from_reservations: 452.0, pay: 452.0, discount_amount: 0.0, 
> other_amount: 0.0, tax: 0.0, created_at: "2016-02-03 05:15:36", 
> updated_at: "2016-02-03 05:15:36", payment_type: 1, is_other_addition: 
> true, is_tax_per: true, tax_value: nil>]> 

сейчас на этом obj. Я хочу вызова метода @paid_drivers = @ paid_drivers.search_paid_driver()

и в моей модели

def self.search_paid_driver() 
raise self.inspect 
end 

Это даст только поля таблицы

как

DriverInvoice (ID: integer, driver_id: integer, total_reservations: integer, total_from_reservations: float, pay: float, discount_amount: float, othe r_amount: поплавок, налог: поплавок, created_at: Дата и время, updated_at: Дата и время, payment_type: целое число, is_other_addition: булево, is_tax_per: логическое, tax_value: поплавок)

Я хочу, чтобы все recoreds из @paid_drivers, так что я могу обрабатывать их дальше в моей модели.

Как я могу это сделать с помощью PLS.

+0

Вы хотите загрузить все драйвера оплаченных в память? Просто '@paid_drivers = DriverInvoice.where (driver_id: current_affilate_company.drivers.pluck (: id)). All'. Но вы должны позволить ему в ленивой загрузке –

+0

@ LongNuyen, пожалуйста, уточните свой ответ – Anish

+0

Но что вам нужно? –

ответ

2

Вы должны использовать active record scope для йо

class DriverInvoice 
    scope :for_company, -> (company) { where(driver_id: current_affilate_company.drivers.pluck(:id))} 
end 

@paid_drivers = DriverInvoice.for_company(current_affilate_company) 

Затем вы можете использовать другие фильтры, определяя другие scope с или с помощью where цепи

2

self внутри self.search_paid_driver() класс DriverInvoice, а не пример ActiveRelation. Итак, то, что вы получили как результат, правильно.

Я бы предложил использовать область для такого запроса.

Тем не менее, если вы хотите достичь же методом класса, это должно быть что-то вроде этого:

def self.search_paid_driver(current_affiliate_company) 
    .where(driver_id: current_affiliate_company.drivers.pluck(:id)) 
end 

Или, если вы можете управлять current_affiliate_company внутри класса, вы можете опустить метод параметров.

+0

что abt, если я передаю @paid_drivers методу search_paid_driver в модели от контроллера, я имею в виду, что это не рельсы – Anish

+0

окончательно я использую scope upvote для направления !! – Anish

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