Tengo categorías que están en una estructura de árbol. Estoy tratando de vincularlos mediante la definición de un padre para cada uno. (No pude encontrar la forma de llamar a la propiedad parent
por lo que es solo category
por ahora, pero significa que el padre).Creando un modelo que tiene una estructura de árbol
class Category < ActiveRecord::Base
has_one :category # the parent category
end
Pero la relación termina en el camino equivocado.
función El captador está en la categoría infantil (correctamente) pero el category_id
se almacena en la matriz:
parent = Category.create(:name => "parent")
child = Category.create(:name => "child", :category => parent)
parent.id # 1
child.id # 2
child.category_id # nil
parent.category_id # 2
child.category.name # "parent" (!!)
El padre tiene que ser capaz de tener varios hijos para que esto no se va a trabajar.
Estoy de acuerdo con Adriano, esto no funciona. Cuando hago algo como 'obj.parent', la consulta que se ejecuta es algo así como' select objs. * From objs where objs.parent_id = 3' Look right? Bueno, el obj.parent_id no es 3, pero es id. El método 'children' sí funciona. – DJTripleThreat
Pude corregir tu respuesta haciendo esto en su lugar: 'belongs_to: parent,: class_name =>" Category ",: foreign_key =>: id,: primary_key =>: parent_id' – DJTripleThreat
@DJTripleThreat Estás seguro de que no lo hiciste t tiene un 'foreign_key' en su asociación' belongs_to' o pone la clave externa ('belongs_to') en el padre? La información crucial aquí es que está haciendo referencia al objeto padre de una clave en el objeto hijo, por lo tanto, cuando llame a 'child.parent' obtendrá una consulta como' SELECT model. * FROM models WHERE id = child.parent_id LIMIT 1'. – coreyward