Мне сложно понять, как реализовать единую модель самостоятельного объединения в Rails. Руководство по ActiveRecord Associations раздел 2.10 вкратце объясняет Self-Joins, но не предоставляет достаточно информации, и каждый пример или сообщение об этом такие ссылки Friendly Друг Railcast, который не является самостоятельным подключением к одной модели, как описано в Rails Guide section 2.10.
Идея - это модель, которая has_many и принадлежит самому себе, без отдельной таблицы отношений. Единственная причина, по которой я вижу необходимость в отдельной таблице, - это если вы хотите, чтобы отношение содержало больше информации, чем просто отношения. например "лучшие друзья", "едва знают их"
У меня простая схема сообщений:
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
parent_post_id - это самореклама к другому сообщению post_id. Модель posts.rb имеет указанное соотношение:
class Post < ActiveRecord::Base
has_many :replies, :class_name => "Post"
belongs_to :parent_post, :class_name => "Post",
:foreign_key => "parent_post_id"
end
В контроллере или представлении я надеюсь, что смогу сделать что-то вроде этого:
@posts.each do |post|
...
@replies = post.replies
@replies.each do |reply|
...
end
end
Или найти родительский пост:
@parent_post = post.parent_post
Все это может быть некорректным пониманием синтаксиса. Поэтому заранее спасибо всем, кто может похлопать меня по смыслу. Я просмотрел все сообщения SO и блога, и никто не пробовал метод самосогласованного самосоединения одной модели, описанный в Руководстве.
Баллы для тех, кто предлагает объяснение, которое не указывает на пример Friendly Friend, который использует отдельную таблицу отношений.