2013-03-02 2 views
0

Допустим, в контроллере есть что-то вроде этого:Ограничение количества строк в формате JSON, который возвращает

@org = Org.includes(programs: :patient_counts]).find(params[:id]) 
respond_with(@org) 

и теперь я передаю это JBuilder:

json.program @org.programs do |program| 
    json.(program, :name) 
    # more code to also return some info from patien_counts table too 
end 

Так что, если у меня есть как 200 программ и в соотношении 1-1 у меня также есть 200 пациентов, тогда возвращаемый JSON будет иметь 200 объектов. НО в моем случае я хочу только определенного количества их. Например, я скажу, что таблица patient_counts имеет два поля: «Зарплата» и «Бонус», и я хочу вернуть 15 объектов в JSON, не все из этих 200 объектов ... только 15 из них имеют самую высокую зарплату + бонус.

Для логики и расчетов, подобных этому сценарию, что мне делать?

EDIT: Информация о модели:

program.rb : 
name:string 
has_many: patient_conuts 

patient_count.rb: 
belongs_to: program 
program_id # from the program above 
total_amount: integer 
+1

Можете ли вы обновить вопрос своими моделями – AnkitG

+0

@AnkitG Спасибо, Sir for follow, Ok Я обновил модель. – Bohn

ответ

1

Почему вы не можете иметь модель вернуть набор данных к вам с условиями, которые у вас возникли, так что вы не должны работать на JSON для фильтрации

Update:

class Program < ActiveRecord::Base 
    has_many :patient_counts 
scope :salary_and_bonus, ->(salary,bonus) {where("salary >= :salary AND bonus >= :bonus ', {salary: salary, bonus: bonus}).limit(15)} 
end 
end 

например

Program.includes(:patient_counts).salary_and_bonus(15,20) #15 and 20 are my assumed limits 
+0

потому что мне недостаточно знаний об этом! Не могли бы вы объяснить больше? Мои модели довольно пустые, просто куча has_many, принадлежит_to для моделей программы и patient_count. – Bohn

+0

Спасибо за образец ответа. Что это, если я хочу сказать «топ-20» зарплатного поля? (т. е. листинг 20 лучших людей с наивысшей зарплатой) – Bohn

+1

, если вы хотите получить зарплату, чтобы изменить сферу действия только с условием оклада и сохранить лимит до 20. По умолчанию он отобрат верхнюю 20 из таблицы, которые удовлетворяют вашим требованиям. критерии зарплаты. – AnkitG

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