未定义的方法`root?'为零:NilClass

时间:2014-04-29 18:12:05

标签: ruby-on-rails ruby ancestry

我使用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

2 个答案:

答案 0 :(得分:2)

您的@origin_catnil。请确保参数[: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_catnil,它也会返回nil,而不是抛出错误。

有关try here的详细信息。