2012-03-12 5 views
8

Chạy: Ruby 1.9.3p0 (2011/10/30 sửa đổi 33.570) [x86_64-darwin11.2.0], Rails 3.2.0Elasticsearch, Tire & Hội

Tôi đang cố gắng để có được tìm kiếm đàn hồi làm việc thông qua TIRE đá quý trên các hiệp hội. Đối với một số lý do tôi tiếp tục nhận được lỗi/lỗi sau khi thực hiện một cào trên nhập khẩu lốp hoặc thỉnh thoảng trên một cái nhìn:

Daves-MacBook-Pro:outdoor dave$ rake environment tire:import CLASS=Gear FORCE=true 
[IMPORT] Deleting index 'gears' 
[IMPORT] Creating index 'gears' with mapping: 
{"gear":{"properties":{}}} 
[IMPORT] Starting import for the 'Gear' class 
-------------------------------------------------------------------------------- 
101/101 | 100% rake aborted!###################################### 
undefined method `last_name' for nil:NilClass 

Tasks: TOP => tire:import 

Dưới đây là mô hình của tôi: GEAR

class Gear < ActiveRecord::Base 
    attr_accessible :title, :size, :price, :image_url, :sub_category_id, :user_id 
    belongs_to :user 
    belongs_to :sub_category 

    validates :title, presence: true 
    validates :size, presence: true 
    validates :price, presence: true 
    validates :sub_category_id, presence: true 
    validates :user_id, presence: true 

    include Tire::Model::Search 
    include Tire::Model::Callbacks 


    def self.search(params) 
    tire.search(load: true, page: params[:page], per_page: 18) do 
     query { string params[:query]} if params[:query].present? 
    end 
    end 

    def to_indexed_json 
    to_json(methods: [:sub_category_name, :user_last_name, :user_first_name, :user_email]) 
    end 

    def sub_category_name 
    sub_category.name 
    end 

    def user_first_name 
    user.first_name 
    end 

    def user_last_name 
    user.last_name 
    end 

    def user_email 
    user.email 
    end 
end 

USER

class User < ActiveRecord::Base 
    attr_accessible :first_name, :last_name, :email, :password, :password_confirmation 
    has_secure_password 
    has_many :gears 
    before_save :create_remember_token 

    email_regex = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 

    validates :first_name, presence: true, 
          length: {:maximum => 50 } 
    validates :last_name, presence: true, 
          length: {:maximum => 50 } 
    validates :email,  presence: true, 
          format: {:with => email_regex}, 
          uniqueness: {:case_sensitive => false} 
    validates :password, presence: true, 
          confirmation: true, 
          length: {within: 6..40} 

    def name 
    first_name + " " + last_name 
    end 

    private 

    def create_remember_token 
     self.remember_token = SecureRandom.urlsafe_base64 
    end 
end 

Danh mục phụ

class SubCategory < ActiveRecord::Base 
    attr_accessible :name 
    belongs_to :category 
    has_many :gears 
end 

Tôi đang thiếu gì? Cảm ơn.

+2

Cập nhật: Ok hóa ra tôi có một vài giá trị NIL trong cơ sở dữ liệu của tôi là lý do cho lỗi. Hy vọng rằng điều này có thể tiết kiệm một vài người một thời gian. – DaveG

+1

Xin chào, tốt nó được sắp xếp ra - vì vậy quá trình nhập khẩu đã chết khi một số tác giả là 'nil'? ... Ngoài ra, có thể bạn có thể sử dụng lại điều này: https://github.com/karmi/railscasts-episodes/commit/ee1f6f39002f32ad25134c81dd6de74ff1b708fa để lập chỉ mục các liên kết mà không cần tạo các phương thức đặc biệt ... – karmi

+0

Có, quá trình nhập sẽ không hoạt động vì một số khóa liên kết ngoài của tôi là không. Nó không có vẻ như thế. Cảm ơn lời đề nghị, tôi sẽ xem xét nó. – DaveG

Trả lời

2

Tôi có một vài giá trị NIL trong cơ sở dữ liệu của mình, đó là lý do cho lỗi. Hy vọng rằng điều này có thể tiết kiệm một vài người một thời gian.