Как я могу включить столбец из таблицы соединений в рельсовую ассоциацию? - PullRequest
1 голос
/ 03 октября 2019

Я объединяю две модели с таблицей соединений, чтобы можно было установить статус для отношения:

class Test < ApplicationRecord
  has_many :products_tests
  has_many :products, through: :products_tests

  def products_with_status
    products_tests = ProductsTest.includes(:product).where(test_id: id)
    products_tests.map do |products_test|
      products_test.product.as_json.merge(status: products_test.status)
    end
  end

end

class Products < Application Record
  has_many :products_tests
  has_many :tests, through: :products_tests
end

class ProductsTest < ApplicationRecord
  belongs_to :product
  belongs_to :test
end

В ProductTest есть столбец status, который позволяет переключать продукт из"активный" - "пауза" для каждого теста.

Я хотел бы объединить в столбце status, когда я использую ассоциацию products из Test. Я взломал вместе products_with_status выше, но мне было интересно, есть ли более "Rails" способ сделать это.

Спасибо!

1 Ответ

1 голос
/ 04 октября 2019

Вы можете добавить новую has_many ассоциацию

has_many :products_with_status, -> { joins(:products_tests).select("DISTINCT products.*, products_tests.status") }, through: :products_tests, class_name: "Product", source: :product

Тогда вы можете сделать

Test.find(1).products_with_status.first.status
...