Недавно я начал изучать Ruby on Rails, и сейчас я занимаюсь разработкой своего первого веб-приложения для электронной коммерции. База данных приложение имеет две таблицы в данный момент: products
и variants
Вытягивание данных из разных таблиц в один вид
products
содержит id
, name
, description
и т.д. Каждый продукт может иметь несколько вариантов.
variants
содержит id
, product_id
, price
, image
и т.д. Он также имеет логическое поле default_var
, который определяет вариант по умолчанию, который должен быть представлен на странице, когда пользователь видит первый продукт.
Это то, что модели выглядят так:
class Product < ActiveRecord::Base
has_many :variants
end
class Variant < ActiveRecord::Base
belongs_to :product
scope :default, -> {where(dafault_var: 1)}
end
На индексной странице я хочу, чтобы иметь возможность отобразить список продуктов с изображением, ценами и описанием рядом с ним, так что информация должна быть сочетание значений из обеих таблиц.
В index.erb файле представления, если я пытаюсь перебирать массив продуктов с использованием метода each
я использовать индексную переменную:
<% @products.each do |product| %>
Я не могу придумать способ доступ к методам контроллера вариантов через эту локальную переменную. Каков наилучший способ получить данные, такие как price
и image
из таблицы variants
? Я хотел бы сохранить минимальный код Ruby в представлениях.
Контроллеры в настоящее время имеют следующий код:
class ProductsController < ApplicationController
def index
@products = Product.paginate(:page => params[:page], :per_page => 5)
#@products = Product.all
end
...
class VariantsController < ApplicationController
def index
@product = Product.find(params[:id])
@variants = @product.variants
end
end
Variant методы? можете ли вы объяснить или показать их? – Haider
Также вы хотите отобразить все варианты продукта? – Haider
Я предполагаю, что я использовал термин методы неправильно. Насколько я понимаю, вся логика программы должна идти в контроллер, поэтому я действительно хотел спросить: есть ли способ избежать непосредственного запроса базы данных в представлении и, скорее, ее приятно разделить на контроллер. Например, на данный момент, чтобы получить доступ к полям таблицы вариантов, у меня есть эта строка в моем файле вида: '<% variant = Variant.find_by (product_id: product.id, default_var: 1)%>' Мне нужен только доступ вариант по умолчанию на индексной странице. – Aliona