【问题标题】:customize save in nested attributes自定义保存嵌套属性
【发布时间】:2016-02-26 16:44:59
【问题描述】:

我有两个班级:

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 表中。

现在它每次都会为新帖子创建新的接收者记录,无论电子邮件是现有的还是新的。

关于如何实现这一点的任何建议?非常感谢!

【问题讨论】:

    标签: ruby-on-rails ruby nested-attributes


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多