我有users
,posts
。
我想为用户#1创建一个新帖子。我想使用类似于选项#2的语法来执行此操作,其中链接到原始用户选择。这可能吗?
选项1(我知道如何做到这一点):
user = User.find(1)
post = Post.create(content: "foobar content", user: user)
选项2(这可能吗?):
User.find(1).new_post(content: "foobar content")
答案 0 :(得分:3)
使用build
方法:
user = User.find(1).posts.build(content: "post content")
如果是has_one
关系,请调用build_association
方法:
user = User.find(1).build_profile(content: "profile content")
在任何一种情况下,新的子对象都已初始化并与父User
相关联,然而,您需要save
User
user.save
实例,以保持关联:
User.find(1).posts.create(content: "post content")
User.find(1).create_profile(content: "profile content")
或者,可以通过create
和create_association
方法创建相同的关联:
create
两种调用都不需要保存父项 - 在调用相应的创建方法的瞬间创建并保存关联的子项。
重要说明: Rails 4 中不推荐使用create_association
和{{1}}方法。