On Rails 4.1.1。
我有一个模型User
和一个模型Comment
(示例模型)。
User
has_many :comments
。
拿这个控制器代码:
@user = User.find(1)
@user.comments.new({ body: "Hello World!" })
@user.save
这会导致我的用户对象出现验证错误,因为该注释尚未持久保存到数据库中。
我有一种情况,我不希望comment
持久存储到数据库,但存在于内存中,以便@user.comments
在我的视图中显示额外的“记录”,但实际上并不存在(作为预览)。
现在我只是从控制器中的数组中删除条目,但我想通过使用更全局的方法(可能在before_save
挂钩中)来防止这些错误在将来发生。
这是一个常见问题吗?我是否经历过一种不是“轨道式”的设计模式?
答案 0 :(得分:0)
将孩子与父母一起保存..您的父模型应该有accepts_nested_attributes_for
在user.rb
中accepted_nested_attributes_for:comments
请注意:对于使用#accepts_nested_attributes_for的每个关联,都会自动启用:自动保存选项。
所以现在..你可以很容易地添加/更新父母/孩子
params = { member: { name: 'Jack', avatar_attributes: { icon: 'smiling' } } }
member = Member.create(params[:member])
member.avatar.id # => 2
member.avatar.icon # => 'smiling'
它还允许您通过成员更新头像:
params = { member: { avatar_attributes: { id: '2', icon: 'sad' } } }
member.update params[:member]
member.avatar.icon # => 'sad'