假设我有一对模型:
class Club < ActiveRecord:Base
has_many :members, autosave: true
end
class Member < ActiveRecord:Base
belongs_to :club
end我希望能够将一些新成员添加到俱乐部,而不需要坚持新成员,直到我拯救俱乐部。我怎么能这样做呢?
使用<<将成员添加到俱乐部并不像我想要的那样工作,因为这会自动保存成员。
发布于 2016-01-27 06:29:33
根据the has_many documentation的说法,“铲子”方法collection<<(object, …)
通过将对象的外键设置为集合的主键,将一个或多个对象添加到集合中。请注意,除非父对象是新记录,否则此操作将立即触发update SQL,而不等待父对象上的保存或更新调用。
如果您希望构造一个新记录而不将其保存到数据库中,请使用collection.build。
返回一个或多个集合类型的新对象,这些对象已使用属性实例化,并通过外键链接到此对象,但尚未保存。
使用Club和Member作为示例模型:
club = Club.find(params[:id])
club.members.build(member_attributes) # member is not saved
club.save # saves club and members发布于 2012-10-16 03:24:39
为成员模型创建一个名为"temporar_id“的属性。
成员是以带有俱乐部id的temporary_id开头的,但它还没有与俱乐部关联。
在运行accept_members之前,club_id都是nil。
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发布于 2012-10-16 02:32:50
这个怎么样?
def add_members
@club = Club.find(params[:id])
@members = #From_where_ever_you_want
@members.each do |member|
@club << member
end
end直到你打电话给
@club.save新成员仅存储在内存中。
https://stackoverflow.com/questions/12901610
复制相似问题