Railsを使い始めたばかりなので、これが非常に簡単に解決できることを願っています。
ブランド、色、product_type など、多数の製品属性を含む 1 つのデータベース (製品) があります。
現在、データベース内の製品の概要を提供できるインデックス ページ (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" のいずれかに一致する、製品のサブセットの個別のブランドと個別の色を再計算できます。3 番目のボタンは、まったくフィルタリングされていない結果に対応します (つまり、インデックス ページが最初に読み込まれるため)。
以前の質問で、次のコードを追加するようにアドバイスされました。
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? }
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 を実行しようとしているときに、エラーは <% @distinctbrands.each do |distinctbrand| %> に関連付けられています)。
データベースがフィルタリングされたため、@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 が定義インデックス内で定義されていないことに問題がありますか? もしそうなら、どうすればこれを行うことができますか?
お時間をいただきありがとうございました