Установка идентификаторов в отношении has_many между тремя моделями - PullRequest
0 голосов
/ 29 марта 2012

Пользователь может создать сообщение. Сообщения имеют комментарии. Комментарий должен принадлежать как пользователю, так и сообщению, но не обязательно тому, кто создал сообщение. Является ли следующий лучший способ смоделировать это:

class User < ActiveRecord::Base
  has_many :posts
  has_many :comments
end

class Post < ActiveRecord::Base
  belongs_to :user
  has_many :comments
end

class Comment < ActiveRecord::Base
  belongs_to :user
  belongs_to :post
end

Если это так, какова наилучшая практика для обеспечения:

  1. user.comments.new не может быть вызвано. Я хочу, чтобы все новые сообщения создавались с использованием post, с которым они связаны.
  2. id пользователя, создающего комментарий, правильно устанавливается при вызове post.comments.new

В противном случае, как лучше моделировать эти отношения?

1 Ответ

1 голос
/ 30 марта 2012

Ваши модели в порядке.

Чтобы установить автора комментария, вы должны сделать это в вашем контроллере:

@comment = post.comments.new do |c|
    c.user = current_user
end

Только не используйте user.comments.new. Почему вы хотите сделать невозможным его использование?

...