2012-03-12 2 views
8

Бег: Ruby 1.9.3p0 (2011-10-30 редакции 33570) [x86_64-darwin11.2.0], Rails 3.2.0Elasticsearch, Tire & Ассоциация

Я пытаюсь получить эластичный поиск работает через ЖЕСТКОСТЬ ШИНЫ через ассоциации. По какой-то причине, я получаю следующие ошибки/ошибки при выполнении граблями на импорт ШИНЫ или иногда на вид:

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 

Вот мои модели: ШЕСТЕРНИ

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 

Sub_Category

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

Что мне не хватает? Благодарю.

+2

Обновление: Оказалось, что в моей базе данных было несколько значений NIL, что стало причиной ошибок. Надеюсь, это может сэкономить несколько человек. – DaveG

+1

Привет, хорошо, что он разобрался - так что процесс импорта умер, когда какой-то автор был «нуль»? ... Также, может быть, вы могли бы повторно использовать это: https://github.com/karmi/railscasts-episodes/commit/ee1f6f39002f32ad25134c81dd6de74ff1b708fa для индексирования ассоциаций без создания специальных методов ... – karmi

+0

Да, процесс импорта не будет работать, потому что некоторые из моих ассоциаций внешних ключей были равны нулю. Кажется, это не понравилось. Спасибо за предложение, я посмотрю на него. – DaveG

ответ

2

У меня было несколько значений NIL в моей базе данных, что стало причиной ошибок. Надеюсь, это может сэкономить несколько человек.

Смежные вопросы