【发布时间】:2013-08-11 12:55:48
【问题描述】:
我有一个这样的商店控制器:
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>
【问题讨论】:
-
你做错了什么?如何显示错误发生的位置?
-
你是什么意思'错误发生的地方'?当我从产品页面访问 dropdown 的链接时会发生这种情况。它向我抛出了上述错误。
-
@oldergod 的意思是你没有向我们展示你使用
capitalize方法的代码,这是引发错误的地方。 -
该错误为您提供了一个强有力的线索,即您调用 capitalize 的对象未定义,因此是一个 Nil 对象。您将需要调查为什么 @type 为空。我建议安装 better_errors gem 并挖掘引发错误的位置。
-
它扔在我使用 @type 变量的商店页面上。更新问题。
标签: ruby-on-rails ruby nomethoderror