2013-10-12 82 views
0

我有一個rails 4應用程序,我試圖使用elasticsearch。在我加入Elasticsearch,我的代碼工作正常,但現在我得到這個錯誤:未定義的方法圖

undefined method `map' for nil:NilClass 

我的索引視圖(我用HAML):

= form_tag products_path, :method => :get do 
    = text_field_tag :query, params[:query] 
    = submit_tag "Search", :name => nil 

= render "table" 

,這裏是我的_table部分:

- headers = @products.map(&:data).flat_map(&:keys).uniq 

%table 
    %tr 
    - headers.each do |key| 
     %th= key 

    - @products.each do |product| 
    %tr 
     - headers.each do |key| 
     %td= product.data[key] 

我的ProductsController#指數

def index 
    if params[:query].present? 
    Product.search(params[:query]) 
    else 
    @products = Product.all.where(:product_type_id => @product.id) 
    end 
end 

我的模特:

class Product < ActiveRecord::Base 
include Tire::Model::Search 
include Tire::Model::Callbacks 

belongs_to :product_type 

end 

謝謝!

+0

該錯誤意味着你有一個未初始化的值,你認爲是一個初始化的數組調用'map'方法。如果'params [:query] .present?'是真的,那麼'@products'不會被初始化,並且在你的'_table'部分調用'@ products.map ...'並且有一個未初始化的值。 – lurker

回答

1

看起來像@products如果存在查詢,則它將爲零。我想你的意思是做這樣的事情:

if params[:query].present? 
    @products = Product.search(params[:query]) 
    else 
    @products = Product.all.where(:product_type_id => @product.id) 
    end