Сообщение принадлежит Теме и Пользователю.Как мне создать сообщение с: topic_id и: user_id, не раскрывая ни с помощью attr_accessible? - PullRequest
1 голос
/ 11 мая 2011

Я создаю обычный форум для изучения / практики Rails. Как вы знаете, пользователи могут создавать темы и сообщения. Темы и Сообщения принадлежат Пользователю, который их создал, а Сообщения принадлежат Теме, в которой они были опубликованы. Примечание.

User Model
  has_many :topics
  has_many :posts

Topic Model
  has_many :posts
  belongs_to :user

Post Model
  belongs_to :user
  belongs_to :topic

Таким образом, когда пользователь создает новое сообщение, ему требуется user_id и topic_id.

Я знаю об ассоциации с:

@user.posts.create(:title => "My Topic.")
@topic.posts.create(:content => "My Post.")

Но эти примеры устанавливают только user_id и topic_id соответственно, но не оба.

Мой вопрос

Как я могу сделать что-то вроде этого:

@topic.posts.create(:content => "This is Dan's post", :user_id => @dan.id)

Без необходимости выставлять user_id в модели Post через attr_accessible :user_id?

Другими словами, я не хочу явно определять :user_id.

Я пробовал что-то вроде:

dans_post = @user.posts.new(:content => "the content of my post")
@topic.posts.create(dans_post)

безрезультатно.

1 Ответ

2 голосов
/ 11 мая 2011

Используйте build для построения ассоциаций вместо new, так как он будет правильно определять внешний ключ.Чтобы решить вашу проблему, используйте merge, чтобы объединить пользователя с параметрами для сообщения:

@topic.posts.build(params[:post].merge(:user => current_user))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...