【问题标题】:undefined method `root?' for nil:NilClass未定义的方法“根?”对于零:NilClass
【发布时间】:2015-08-01 18:26:10
【问题描述】:

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

【问题讨论】:

  • 先做p params:category这个键有没有值。
  • Category.find_by_name(params[:category]) 没有结果。
  • 您拨打.root?没有任何问题;问题是 @origin_cat 为零,因为查找失败。你应该检查params[:category]的值

标签: ruby-on-rails ruby ancestry


【解决方案1】:

你应该首先检查@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_catnil,它也只会返回nil,而不是抛出错误。

更多详情请尝试here

【讨论】:

    【解决方案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
    

    【讨论】:

    • 他为什么会像你一样使用unless?它与if 具有相反的逻辑含义,因此现在该代码仅在它不是root 时才会运行。当@origin_catnil 时,它也不能解决异常。基本上,您将他的if @origin_cat.root? 意图更改为if not @origin_cat.root?
    • 这仍然会给出同样的错误。也改变了 OP 的逻辑。
    • @KirtiThorat 哎呀已编辑!
    • @DaniëlKnippers 道歉。除非在错误的情况下使用。更新。看看它。
    • @KirtiThorat 谢谢 :)
    猜你喜欢
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2014-11-21
    • 2016-11-21
    相关资源
    最近更新 更多