私はこのようなストアコントローラーを持っています:
class StoreController < ApplicationController
helper_method :product_type
def store
cat=params[:cat]
subcat=params[:subcat]
if cat.empty?
@store=SubCategory.find_by_name(params[:subcat]).products.where(product_type: params[:type]).paginate(:page => params[:page], :per_page => 12)
@subcat=params[:subcat]
@cat=""
else
@store=Category.find_by_name(params[:cat]).products.where(product_type: params[:type]).paginate(:page => params[:page], :per_page => 12)
@cat=params[:cat]
@subcat=""
end
product_type
end
def show
@show=Product.where(product_type: params[:type]).paginate(:page => params[:page], :per_page => 12)
product_type
end
def product
@product=Product.find(params[:product_id])
product_type
end
def product_type
@type=params[:type]
end
end
いずれにせよ、最初にshowアクションを呼び出しています。したがって、@type変数はその値自体を取得します。@type変数をすべてのメソッドで使用できるようにするために、他のすべてのメソッドで product_type メソッドを呼び出しました。
これらすべての変数を、ドロップダウン リストであり、ヘッダーのようにサイト全体に共通 の部分的なドロップダウンから呼び出しています。
<%=link_to "T-shirt", store_path(cat:"",subcat:"tshirts",type: @type) %>
問題は、製品メソッドを除くStoreControllerのすべてのメソッドでこのドロップダウンリンクをナビゲートできることです。つまり、ストアを介してドロップダウンリストのリンクを呼び出すと、ページを表示すると正常に動作しますが、次のエラーがスローされます製品ページから呼び出された場合。
nil:NilClass の未定義メソッド `capitalize'
@typeには、私が大文字にする文字列が含まれています。私はどこで間違っていますか?
私のstore.html.erbにはこの行があります
<h1><%= @type.capitalize+"'s " + @subcat.capitalize + @cat.capitalize %></h1>