我有两个班级:
class Post
has_and_belongs_to_many :receivers
accepts_nested_attributes_for :receivers
end
class Receiver
has_and_belongs_to_many :posts
表模式如下:
posts: id, xxx
receivers: id, email, name, xxxx
posts_receivers: post_id, receiver_id
我几乎遵循这里的指南:http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association
因此,在我的post
表单中,每个表单都可以包含多个接收者,这些接收者只是几个电子邮件文本字段。从这些电子邮件中自动创建新的接收者记录。会发生不同的post
表单有一些现有的电子邮件,然后我不想在receivers
表中为现有电子邮件创建新记录。相反,我想找到带有现有电子邮件的接收者ID,并将带有帖子ID的id保存到posts_receivers
表中。
现在它只是为新帖子创建新的接收者记录,无论电子邮件是现有的还是新的。
有关如何实施此建议的任何建议?非常感谢!
答案 0 :(得分:1)
嵌套属性不会为您处理这种情况 - 当嵌套对象属于父对象时,它们更适用于它们。
您可以通过加载控制器中的每个现有接收器,创建其余接收器,然后将它们分配到帖子来手动执行此操作:
def create
post = Post.new(params[:post])
post.receivers = params[:receivers].map do |receiver_params|
Receiver.first_or_create(receiver_params)
end
post.save!
end