nil的未定义方法:NilClass问题

时间:2013-10-12 17:30:04

标签: ruby-on-rails ruby solr ruby-on-rails-4 sunspot

我有一个使用太阳黑子的rails 4应用程序。这是我的控制器:

before_action :set_product_type

def index
   if params[:search].present?
      @search = Product.search do
         fulltext params[:search]
         with(:product_type_id, @product_type.id)
      end
      @products = @search.results
   else
      @products = Product.all.where(:product_type_id => @product_type.id)
   end
end

private
def set_product_type
  @product_type = Product_type.find(params[:product_type_id])
end

这是我的模特:

searchable do
  text :data
  integer :product_type_id
end

当我使用它时,我得到:

undefined method `id' for nil:NilClass

但是当我使用静态值时:

with(:product_type_id, 3)

它工作正常。

我认为可能是因为@ product_type.id为null,但是当我打印出@product_type.id时,它被设置为一个值。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这是因为你的@product_type实例变量从未被定义过(至少我没有在索引动作中看到它,如果在before_filter中也可能被定义),所以它是零。