我使用Ancestry gem为Rails 3构建了一些类别树 我可以在控制台和其他控制器之间使用所有Ancestry方法。 但是现在我面临使用root等方法的问题?和is_root?确定所选猫是否为根类别。
我在应用程序控制器中的代码
private
def set_categories
def set_ids
case action_name
when "index"
@origin_cat = Category.find_by_name(params[:category])
if @origin_cat.root?
@descendant_ids = @origin_cat.descendant_ids
@descendant_prods = Product.where(:category_id => @descendant_ids ).paginate(:per_page=>10, :page=> params[:page])
else
end
......
我的erorr看起来像这样:
undefined method `root?' for nil:NilClass
答案 0 :(得分:2)
您的@origin_cat
为nil
。请确保参数[:category]的值不是nil
if @origin_cat.present? && @origin_cat.root?
@descendant_ids = @origin_cat.descendant_ids
@descendant_prods = Product.where(:category_id => @descendant_ids).paginate(:per_page=>10, :page=> params[:page])
else
end
答案 1 :(得分:2)
您应首先检查@origin_cat
是否不是nil
,而不是@origin_cat.root?
是否为真,如下所示:
@origin_cat = Category.find_by_name(params[:category])
if @origin_cat && @origin_cat.root?
@descendant_ids = @origin_cat.descendant_ids
@descendant_prods = Product.where(:category_id => @descendant_ids ).paginate(:per_page=>10, :page=> params[:page])
else
end
或者您可以这样做:
if @origin_cat.try(:root?)
尝试即使@origin_cat
为nil
,它也会返回nil
,而不是抛出错误。
有关try here的详细信息。