首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在将对象添加到关联集合,但尚未保存

正在将对象添加到关联集合,但尚未保存
EN

Stack Overflow用户
提问于 2012-10-16 02:18:19
回答 3查看 1K关注 0票数 7

假设我有一对模型:

代码语言:javascript
复制
class Club < ActiveRecord:Base
  has_many :members, autosave: true
end

class Member < ActiveRecord:Base
  belongs_to :club
end

我希望能够将一些新成员添加到俱乐部,而不需要坚持新成员,直到我拯救俱乐部。我怎么能这样做呢?

使用<<将成员添加到俱乐部并不像我想要的那样工作,因为这会自动保存成员。

EN

回答 3

Stack Overflow用户

发布于 2016-01-27 06:29:33

根据the has_many documentation的说法,“铲子”方法collection<<(object, …)

通过将对象的外键设置为集合的主键,将一个或多个对象添加到集合中。请注意,除非父对象是新记录,否则此操作将立即触发update SQL,而不等待父对象上的保存或更新调用。

如果您希望构造一个新记录而不将其保存到数据库中,请使用collection.build

返回一个或多个集合类型的新对象,这些对象已使用属性实例化,并通过外键链接到此对象,但尚未保存。

使用Club和Member作为示例模型:

代码语言:javascript
复制
club = Club.find(params[:id])
club.members.build(member_attributes) # member is not saved
club.save # saves club and members
票数 3
EN

Stack Overflow用户

发布于 2012-10-16 03:24:39

为成员模型创建一个名为"temporar_id“的属性。

成员是以带有俱乐部id的temporary_id开头的,但它还没有与俱乐部关联。

在运行accept_members之前,club_id都是nil

代码语言:javascript
复制
class Club < ActiveRecord:Base
  has_many :members, autosave: true

  # Accepts all new member, just as an example
  # Used like this in controller
  # @club = Club.find(params[:id])
  # @club.accept_members
  def accept_members
    User.find_all_by_temporary(true).each do |new_member|
      new_member.tempoary = false
      new_member.club_id = id 
    end
  end
end

class Member < ActiveRecord:Base
  belongs_to :temporary
  belongs_to :club
end
票数 0
EN

Stack Overflow用户

发布于 2012-10-16 02:32:50

这个怎么样?

代码语言:javascript
复制
def add_members
  @club = Club.find(params[:id])
  @members = #From_where_ever_you_want
  @members.each do |member|
  @club << member
end
end

直到你打电话给

代码语言:javascript
复制
@club.save

新成员仅存储在内存中。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12901610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档