Tengo dificultades para comprender cómo implementar un solo modelo de autoinscripción en Rails. El Guide to ActiveRecord Associations section 2.10 explica brevemente Autocombinaciones pero no ofrece suficiente información, y cada ejemplo o publicación al respecto hace referencia al ejemplo de Friend Friend Railcast que no es un modelo de autocombinación, como se describe en el Rails Guide section 2.10.Understanding Rails ActiveRecord "single model" se une a sí mismo
La idea es un modelo que tiene_mucho y pertenece_a sí mismo, sin necesidad de una tabla separada para la relación. La única razón por la que veo para necesitar una tabla separada es si desea que la relación contenga más información que solo la relación. p.ej. "mejores amigos", "casi no los conocemos"
Tengo un esquema simple de la publicación:
create_table "posts", :force => true do |t|
t.datetime "posted"
t.string "nick"
t.string "title"
t.text "content"
t.integer "parent_post_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
El parent_post_id es una auto-referencia a otros de post_id de correos. El modelo posts.rb tiene la relación definida:
class Post < ActiveRecord::Base
has_many :replies, :class_name => "Post"
belongs_to :parent_post, :class_name => "Post",
:foreign_key => "parent_post_id"
end
En el controlador o ver Estoy esperando a ser capaz de hacer algo como esto:
@posts.each do |post|
...
@replies = post.replies
@replies.each do |reply|
...
end
end
O encontrar a los padres del mensaje:
@parent_post = post.parent_post
Esto puede ser un error de sintaxis. Así que gracias de antemano a cualquiera que pueda darme algo de sentido. Revisé todas las publicaciones de SO y de blog y ninguno de ellos prueba el método de auto-referencia autorregulado de un solo modelo descrito en la Guía.
Puntos para cualquier persona que ofrezca una explicación que no apunte al ejemplo de Amigo amistoso que usa una tabla de relaciones separada.
Sería más fácil comenzar si describió lo que estaba sucediendo o no de la forma esperada. Además, cosas como 'act_as_tree' son de una sola tabla, un solo modelo autorreferencial: ¿has considerado mirar algo así? –
Pensé que sí. Esperaba poder llamar a post.replies y obtener un conjunto de instancias de publicaciones que se completaron según la publicación principal, mediante parent_post_id = post_id. – garlicman
Eso explica lo que hiciste. No es lo que pasó –