ruby-on-rails - rails 4 : Forbid creating a parent object when associated one with specified attribute already exists

标签 ruby-on-rails activerecord nested-attributes

我有一个具有一对一关系的用户和配置文件对象。配置文件对象有一个 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/

相关文章:

ruby-on-rails - 将 cucumber 翻译成 rspec

sql - Ruby ActiveRecord 通过关联进行多重联接

ruby-on-rails - Rails:是否可以为has_and_belongs_to_many关联添加额外的属性?

ruby-on-rails - accepts_nested_attributes_for的替代方法-也许是virtus

ruby-on-rails - 当 :allow_destroy => true 时删除关联而不是销毁对象

ruby-on-rails - 根据 HABTM 或 HMT 相关记录的数量进行搜索排序

ruby-on-rails - 工头开发与生产( rails )

ruby-on-rails - 如何根据 Rails 中的外键列选择唯一记录?

ruby-on-rails - Rails - 用一个链接更新多个资源条目

ruby-on-rails - nginx后面为什么瘦?