de reproducción: 1.9.3p0 Ruby (2011-10-30 revisión 33570) [x86_64-darwin11.2.0], Rails 3.2.0Elasticsearch, Tire & Asociaciones
Estoy intentando conseguir elasticsearch de trabajo a través de la TIRE gem en todas las asociaciones. Por alguna razón me siguen dando los siguientes errores/o errores al realizar un rastrillo en una importación de LLANTA o de vez en cuando en una visió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
Éstos son mis modelos: ENGRANAJE
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
USUARIO
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
¿Qué me falta? Gracias.
Actualización: Ok, resultó que tenía algunos valores NIL en mi base de datos que fueron el motivo de los errores. Con suerte, esto puede salvar a algunas personas en algún momento. – DaveG
Hola, bueno, está resuelto, ¿así que el proceso de importación murió cuando algún autor fue 'nil'? ... También, tal vez podrías reutilizar esto: https://github.com/karmi/railscasts-episodes/commit/ee1f6f39002f32ad25134c81dd6de74ff1b708fa para indexar las asociaciones sin crear los métodos especiales ... – karmi
Sí, el proceso de importación no funcionaría porque algunas de las claves externas de mi asociación eran nulas. No pareció gustarle eso. Gracias por la sugerencia, lo echaré un vistazo. – DaveG