我正在做一个传统的论坛来学习/练习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)
无需通过attr_accessible :user_id
在 Post 模型中公开user_id
?
换句话说,我不想明确定义:user_id
。
我尝试了这样的事情:
dans_post = @user.posts.new(:content => "the content of my post")
@topic.posts.create(dans_post)
无济于事。
使用 build
而不是 new
来构建关联,因为它将正确定义外键。要解决您的问题,请使用merge
将用户合并到帖子的参数中:
@topic.posts.build(params[:post].merge(:user => current_user))