2013-10-12 1 views
0

У меня есть приложение для рельсов 4, которое использует солнечное пятно. Вот мой контроллер:Неопределенный метод для nil: NilClass Issue

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 был пустым, но когда я распечатываю @product_type.id, он установлен в значение.

Спасибо за помощь!

+0

Точно, где в 'index' вы проверяли, что значение' @ product_type.id' не 'nil'? – lurker

+0

@mbratch, на index.html.haml, я просто положил это на страницу: '% h1 = @ product_type.id' и распечатал 3 (это был идентификатор для этой коллекции) –

ответ

0

Это потому, что переменная экземпляра @product_type никогда не была определена (по крайней мере, я не вижу ее в действии индекса, ее также можно определить, если before_filter), поэтому она равна нулю.

+0

Спасибо за ответ. Извините, что я забыл опубликовать, но я установил @product_type в 'before_action' –

+0

Очевидно, что-то там испорчено, иначе вы не получите ничто. COuld Вы обновляете вопрос с кодом? –

+0

Jekabasons, конечно, я только что разместил его. –