Фильтрация данных в 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-запрос?

Заранее спасибо!

0 ответов

Другие вопросы по тегам