Правильно ли настроены мои ассоциации ActiveRecord? (простое приложение для доски объявлений) - PullRequest
0 голосов
/ 25 апреля 2011

По сути, я хочу, чтобы в теме было много сообщений, а в сообщениях - много комментариев.Если сообщение будет уничтожено, я хочу, чтобы его комментарии были уничтожены.Если тема удалена, я хочу, чтобы ее сообщения и комментарии были уничтожены.Код ниже выполняет это?И необходима ли строка has_one :topic?

topic.rb:

class Topic < ActiveRecord::Base
  has_many :posts, :dependent => :destroy
end

post.rb:

class Post < ActiveRecord::Base
  belongs_to :topic, :dependent => :destroy, :touch => true
  has_one    :topic
  has_many   :comments, :dependent => :destroy
end

comment.rb:

class Comment < ActiveRecord::Base
  belongs_to :post, :dependent => :destroy, :touch => true
end

Должен ли я использовать для этого драгоценный камень Ancestry?Это сделало бы это еще более простым?Спасибо за чтение моих вопросов.Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 25 апреля 2011

1) has_one :topic не требуется, с belongs_to вы уже объявляете ассоциацию.

2) :dependent => :destroy идет в сторону has_many для ваших требований.Если вы разместите их на стороне принадлежащих вам, вы уничтожите тему, однажды уничтожив одну из его публикаций, оставив сироту множество других сообщений.

Это код, который вы ищете:

topic.rb:

class Topic < ActiveRecord::Base
  has_many :posts, :dependent => :destroy
end

post.rb:

class Post < ActiveRecord::Base
  belongs_to :topic, :touch => true
  has_many   :comments, :dependent => :destroy
end

comment.rb:

class Comment < ActiveRecord::Base
  belongs_to :post, :touch => true
end
...