我正试图通过与另一个模型的关系来保存一个具有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,
请注意,我在数据库中只有一个成员 我没有其他需要做的事情,在过去的一天里我一直在尝试这个,我找不到解决办法
答案 0 :(得分:0)
这就是问题所在,我在数据库中没有一个成员,但是有很多成员,并且在成员表中有很多重复的电子邮件,在创建了一些重复的电子邮件之后,我添加了对电子邮件的验证。所以这就是为什么我收到上述错误“ ActiveRecord :: RecordInvalid:身份验证出错:成员电子邮件已被使用”的原因 因此,然后在控制台中,我运行了一个脚本,使所有成员电子邮件变为唯一,并再次运行了相同的命令,这一次它起作用了
事实证明,重复记录会阻止保存具有很多直通关系的记录
答案 1 :(得分:0)
如果遇到此错误,通常意味着存在一个与has_many关系相同名称的属性/方法名称。我有一个名为“ csv_products”的列名,它将存储要处理的产品的csv文件。并具有称为“ has_many:products”的关系。
每次我尝试对“ csv_products”进行操作(将其设置为nil或对其进行更新)时,都会引发此错误。我最终将其重命名为“ csv_file”。