Вы можете использовать следующее:
@restaurant.restaurant_products.joins(:products).select('restaurant_products.custom_price, products.*')
Это даст вам доступ к экземплярам, включая все столбцы продукта, а также к пользовательской цене таблицы объединения.
Сгенерированный SQLбудет выглядеть примерно так:
SELECT restaurant_products.custom_price, products.*
FROM `restaurant_products`
INNER JOIN `products` ON `products`.`id` = `restaurant_products`.`product_id`
WHERE `restaurant_products`.`restaurant_id` = 1
Быстрый совет: то, что возвращается, может выглядеть немного странно, что-то вроде:
[#<RestaurantProduct id: 1, custom_price: 10>]
... хотя, если вы позвоните attributes
, илиАтрибут продукта для экземпляра здесь, у вас будет доступ ко всему, что вы захотите.
Выше приведен быстрый и эффективный доступ к данным записей, хотя, если вам нужен доступ к методам самого продукта, вы могли бы предпочесть следующее:
@product_details = @restaurant.restaurant_products.includes(:products)
А затем циклически перебирать данные:
@product_details.each do |product_detail|
product_detail.custom_price
product_detail.product.column_data
product_detail.product.a_method
end
Надеюсь, что это поможет - дайте мне знать, как у вас обстоят дела или если у вас есть какие-либо вопросы.