2009-07-30 13 views
6

todos. Tengo una idea de usar ActiveRecord implementar algo extraño, como el siguiente ejemplo:¿Cómo se puede consultar la tabla Activerecord de Rails?

SystemInfo < ActiveRecord::Base 
    belongs_to :SystemInfo 

end 

La idea es, Sistema A Sistema B puede contener como su hijo. Así que voy a generar el esqueleto de aplicación como:

script/generate scaffold SystemInfo parent_id:integer name:string 

y luego, cuando inserto Sistema A, I utilizará ID de Sistema A como parent_id del Sistema B (parent_id del Sistema A será igual a 'nil' y cuando se utiliza el. comando como este:

sysA = SystemInfo.find_by_id(1) # Get System A 

creo que esto es posible conseguir Sistema a, y es niño, el Sistema B. de manera similar a:

sysA.childrens # Get System B and other SystemInfo which has parent_id == 1 (System A's ID) 

Podría sugerir directriz para mí para implementar esta idea que? thi Esto es una idea bastante común y deberíamos poder hacerlo. ;)

Respuesta

15

Tiene la idea correcta.

class SystemInfo < ActiveRecord::Base 
    belongs_to :parent, :class_name => 'SystemInfo' 
    has_many :children, :class_name => 'SystemInfo', :foreign_key => 'parent_id' 
end 

s = SystemInfo.find(1) 
s.children 
# => [...] 
s.parent 
# => <SystemInfo> 
+0

Gracias, Erik. He intentado con tu solución, pero cuando la vuelvo a probar en la consola, muestra algo como lo siguiente: ¡vuelve a cargar! de recarga ... => true >> SysInfo.find (: todos) SysInfo.find (: todos) ArgumentError: La llave desconocida (s): Clase utilizo Rails 2.3.3. ¿Podrías explicarme por qué no podría hacer como tú? – Teerasej

+0

Encontré lo que tengo que mejorar. Necesito usar ': class_name' en lugar de ': class' (puede ser, es de la nueva versión de Rails). Muchas gracias, Erik! Elijo tu respuesta! ;) – Teerasej

+0

Gracias, Teerasej. Actualicé la respuesta para ser correcta. – erik

2

Mire en acts_as_tree. Lo usé en un proyecto manera atrás, así que no estoy seguro de cuánto ha cambiado desde entonces, pero creo que hace lo que estás buscando.

Cuestiones relacionadas