我有一个这样的商店控制器:
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>