как добавить более одного внешнего ключа в activerecord - PullRequest
1 голос
/ 17 декабря 2010

модель пользователя

has_many :comments, :dependent => :destroy
has_many :topics, :dependent => :destroy

тема модели

belongs_to :user
has_many_comments, :dependent => :destroy

комментарий модель

belongs_to :user
has_many :topics, :dependent => :destroy

Я знаю, что для добавления внешнего ключа при создании нового сообщения мы пишем (я использую authlogic)

def create
  @topic = current_user.topics.build(params[:topic])
end

Но что я должен написать, чтобы добавить более одного внешнего ключа. Например, когда я добавляю комментарий, что я должен написать? Комментарий принадлежит как пользователю, так и посту. Я не хочу использовать скрытые поля. Мне нужно что-то в контроллере.

1 Ответ

0 голосов
/ 17 декабря 2010

Полагаю, вам интересно, как создать Comment таким же образом, как @topic = current_user.topics.build(params[:topic]), потому что в Comment есть два внешних ключа, верно?

При создании Comment вы отправляете запрос по некоторому URL-адресу, например /posts/16/comments. Таким образом, вы можете сделать что-то вроде этого:

def create
  @post = Post.find params[:post_id]  # or with permission checking
  @comment = @post.comments.build(params[:comment].merge(:user_id => current_user.id))
end

При создании комментария user_id не должен быть произвольным числом из пользовательских вводимых данных, а для обеспечения безопасности лучше установить attr_protected в модели комментариев:

class Comment < ActiveRecord::Base
  attr_protected :user_id
end

Также в модели Post / Topic тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...