-1

私はこのようなストアコントローラーを持っています:

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>  
4

2 に答える 2

0

capitalizeエラーは、メソッド onを呼び出していることを示していますnil

ここに 2 つの潜在的な問題があります。

  1. 使用するfind_by_name
  2. ある場合またはある場合params[:subcat]はどうなりますかnilparams[:cat]nil

を使用しfind_by_nameても、レコードが見つからない場合は例外が発生せず、nil返されます。

params[:cat]またはparams[:subcat]が定義されているかどうかを確認する条件が正しくありません。一部が欠落しているnil場合、値が発生する可能性があります。params

次のことを確認してください。

if params[:cat].blank?
  # ...
end

if params[:subcat].blank?
  # ...
end

blank?代わりに( と の両方をempty?チェックする)も使用します。nil""

于 2013-08-11T14:26:21.113 に答える