Фильтрация данных в Rails, когда используются отношения "has_one", "through" и "own_to"
Пожалуйста, посмотрите на мои модели:
class SalaryItem < ApplicationRecord
has_one :profession
delegate :name,
:to => :profession,
:prefix => true,
:allow_nil => false
accepts_nested_attributes_for :profession
has_one :profession_category, :through => :profession
delegate :name,
:to => :profession_category,
:prefix => true,
:allow_nil => false
end
class Profession < ApplicationRecord
belongs_to :salary_item, optional: false
belongs_to :profession_category, optional: false
end
class ProfessionCategory < ApplicationRecord
has_many :professions
end
SalaryItem имеет только одну профессию и только одну профессию-категорию по профессии. Схема базы данных выглядит следующим образом:
create_table "salary_items", force: :cascade do |t|
t.integer "status"
t.string "description"
end
create_table "professions", force: :cascade do |t|
t.string "name"
t.integer "profession_category_id"
t.integer "salary_item_id"
end
create_table "profession_categories", force: :cascade do |t|
t.string "name"
t.integer "order"
end
Хорошо, давайте предположим, что я хочу отфильтровать свой SalaryItem, используя профессию_категорию. Каков наилучший способ достичь этого?
Я мог бы сделать это следующим образом:
@filtered_salary_items = Profession.where('profession_category_id = ?', params[:profession_category]).pluck(:salary_item_id)
@salary_items = SalaryItem.where(:id => @filtered_salary_items)
... но я чувствую, что это не лучший способ.
Интересно, возможно ли получить данные, используя только один SQL-запрос?
Заранее спасибо!