我有一个具有一对一关系的用户和配置文件对象。配置文件对象有一个 facebook_id 参数。 我需要创建用户并通过嵌套属性对应的配置文件,除非数据库中已存在具有指定 facebook_id 的配置文件。
请帮助我找到正确的方法。我尝试将以下内容添加到我的 user.rb 中:
accepts_nested_attributes_for :social_profile#, :reject_if => proc {|attributes| Profile.where(:facebook_id=>attributes['facebook_id']).first}
这会阻止创建具有相同 facebook_id 的配置文件对象。但它无论如何都会创建一个用户对象,而根本没有任何关联的配置文件,这是不需要的。 在这种情况下如何禁止创建用户对象?
最佳答案
您可以简单地在 SocialMedia 模型的数据库表上添加一个唯一索引。您还可以添加验证:
validates_uniqueness_of :facebook_id
在您的用户模型中,您将测试存在和存在:
validate_presence_of :social_media_id
validate :social_profile_exists
protected
def social_profile_exists
errors.add(:social_media_id, "does not exist") unless SocialProfile.exists?(social_media_id)
end
也许这已经可以工作了:
validates_associated :social_media
应确保关联记录本身有效。
关于ruby-on-rails - rails 4 : Forbid creating a parent object when associated one with specified attribute already exists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21699639/