Ruby on Rails:创建属于另一个模型的新记录

时间:2014-05-29 23:18:14

标签: ruby-on-rails ruby ruby-on-rails-4

我有usersposts

我想为用户#1创建一个新帖子。我想使用类似于选项#2的语法来执行此操作,其中链接到原始用户选择。这可能吗?

选项1(我知道如何做到这一点):

user = User.find(1)
post = Post.create(content: "foobar content", user: user)

选项2(这可能吗?):

User.find(1).new_post(content: "foobar content") 

1 个答案:

答案 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")

或者,可以通过createcreate_association方法创建相同的关联:

create

两种调用都不需要保存父项 - 在调用相应的创建方法的瞬间创建并保存关联的子项。

重要说明 Rails 4 中不推荐使用create_association和{{1}}方法。