Надеюсь, это очень легко решить, так как я только начинаю с Rails.
У меня есть одна база данных (Продукты), которая содержит ряд атрибутов продукта, включая бренд, цвет и тип продукта.
В настоящее время у меня есть страница индекса (в каталоге productfinder), которая может предоставить сводку продуктов в базе данных. Я использую следующий код в index.html.erb:
<% @distinctbrands.each do |distinctbrand| %>
<h4><%= distinctbrand %></h4>
<% end %>
В productfinder_controller.rb у меня есть:
def index
@distinctbrands = Product.find( :all, :order => 'brand ASC', :select => 'brand' ).map{ |i| i.brand }.uniq
@distinctcolours = Product.find( :all, :order => 'colour ASC', :select => 'colour' ).map{ |i| i.colour }.uniq
end
ДО ЭТОЙ ТОЧКИ ВСЕ СЧИТАЕТ, ЧТОБЫ РАБОТАТЬ ПРАВИЛЬНО
Теперь я хотел бы добавить 3 кнопки на мою индексную страницу, эти кнопки позволили бы пользователю пересчитать различные бренды и различные цвета для подмножества продуктов - в соответствии с product_type = "new" или "used". Третья кнопка будет соответствовать результатам, не фильтруемым вообще (т. Е. При начальной загрузке страницы индекса).
В предыдущем вопросе мне посоветовали добавить следующий код:
В productfinder_controller:
before_filter :load_products, :only => [:index, :bybrand, :bycolour, :byprice]
protected
def load_products
@products = Product.by_product_type(params[:product_type])
end
В Product.rb:
scope :by_product_type, lambda{ |product_type| where(product_type: product_type.to_i) unless product_type.nil? }
In index.html.erb
<%= link_to "New", :controller => params[:controller], :action => params[:action], :product_type => 'New' %>
<%= link_to "Used", :controller => params[:controller], :action => params[:action], :product_type => 'Used' %>
<%= link_to "Don't Restrict", :controller => params[:controller], :action => params[:action], :product_type => '' %>
Когда приложение теперь запущено, я получаю NoMethodError - ProductFinder # Index (при попытке сделать nil.each
Ошибка связана с <% @ diverbrands.each do | diverbrand | %>
Интересно, была ли проблема в функциях, определяющих @distinctbrands и @distinctcolours, поскольку база данных теперь отфильтрована, однако я получаю одинаковую ошибку для обеих следующих ситуаций:
def index
@distinctbrands = @product.find( :all, :order => 'brand ASC', :select => 'brand' ).map{ |i| i.brand }.uniq
@distinctcolours = @product.find( :all, :order => 'colour ASC', :select => 'colour' ).map{ |i| i.colour }.uniq
end
и
def index
@distinctbrands = Product.find( :all, :order => 'brand ASC', :select => 'brand' ).map{ |i| i.brand }.uniq
@distinctcolours = Product.find( :all, :order => 'colour ASC', :select => 'colour' ).map{ |i| i.colour }.uniq
end
Может кто-нибудь предложить мне возможное решение, пожалуйста? Проблема связана с тем, что @products не определен в пределах индекса def? Если так, как это можно сделать?
Большое спасибо за ваше время