0

我有一些使用 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

......

我的错误看起来像这样:

undefined method `root?' for nil:NilClass
4

2 回答 2

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?)

使用 try,即使@origin_catis nil,它也只会返回nil,而不是抛出错误。

更多详情请点击此处

于 2014-04-29T18:23:49.730 回答
2

@origin_catnil。确保 params[: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
于 2014-04-29T18:19:51.040 回答