如何在activerecord中添加多个外键

时间:2010-12-17 00:18:30

标签: ruby-on-rails activerecord

用户模型

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

但是我应该写什么来添加多个外键。例如,当我添加注释时,我应该写什么?评论属于User和Post。我不想使用隐藏字段。我需要控制器中的东西。

1 个答案:

答案 0 :(得分:0)

我猜你想知道如何以与Comment相同的方式创建@topic = current_user.topics.build(params[:topic]),因为Comment有两个外键,对吗?

创建Comment时,您会将请求发布到某个网址/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模型中也是如此。