无法保存具有很多直通关系的记录

时间:2019-05-09 06:36:23

标签: ruby ruby-on-rails-4

我正试图通过与另一个模型的关系来保存一个具有has_mnay的模型,不幸的是,它不允许保存

class Group < ActiveRecord::Base
  has_many :group_members, inverse_of: :group
  has_many :members, through: :group_members
end

class GroupMember < ActiveRecord::Base
  belongs_to :group
  belongs_to :member

  validates_presence_of :group, :member
end

class Member < ActiveRecord::Base
  has_many :group_members, inverse_of: :member
  has_many :groups, through: :group_members

 validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: true

end

所以在我的控制台中,我创建了一个组

g = Group.last.dup (duplicating a record)
m = Member.last
g.members << m
g.save!

我收到此错误

ActiveRecord :: RecordInvalid: Authentication went wrong: Members email is already used,

请注意,我在数据库中只有一个成员 我没有其他需要做的事情,在过去的一天里我一直在尝试这个,我找不到解决办法

2 个答案:

答案 0 :(得分:0)

这就是问题所在,我在数据库中没有一个成员,但是有很多成员,并且在成员表中有很多重复的电子邮件,在创建了一些重复的电子邮件之后,我添加了对电子邮件的验证。所以这就是为什么我收到上述错误“ ActiveRecord :: RecordInvalid:身份验证出错:成员电子邮件已被使用”的原因 因此,然后在控制台中,我运行了一个脚本,使所有成员电子邮件变为唯一,并再次运行了相同的命令,这一次它起作用了

事实证明,重复记录会阻止保存具有很多直通关系的记录

答案 1 :(得分:0)

如果遇到此错误,通常意味着存在一个与has_many关系相同名称的属性/方法名称。我有一个名为“ csv_products”的列名,它将存储要处理的产品的csv文件。并具有称为“ has_many:products”的关系。

每次我尝试对“ csv_products”进行操作(将其设置为nil或对其进行更新)时,都会引发此错误。我最终将其重命名为“ csv_file”。