rails 4中has_many验证中的独特子项

时间:2014-01-16 12:00:09

标签: ruby-on-rails ruby ruby-on-rails-4

我正在使用Google Places API来收集个人资料中的任意数量的位置。每个位置都有profile_id,4个地址字段以及lat和long。我想确保每个配置文件的所有位置都是唯一的。

目前,我正在使用下面的代码来验证4个地址字段的唯一性,但这会导致验证错误返回到视图。我宁愿保存配置文件和位置(删除重复项)而不向用户返回错误。

解决这个问题的最佳方式是什么?有轨道方法还是我应该创建自己的验证前功能?

class Profile < ActiveRecord::Base
    has_many :locations

    accepts_nested_attributes_for :locations, allow_destroy: true

        etc etc

end

class Location < ActiveRecord::Base

    belongs_to :profile

    # Only allow unique locations for each profile
    validates_uniqueness_of :profile_id, scope: [:sublocality, :locality, :administrative_area_level_1, :country]

        etc etc

end

1 个答案:

答案 0 :(得分:0)

您可以在error[:profile_id].present?回调中查看after_validation。 如果存在与profile_id相关的错误,请删除重复项,然后再次删除save

如果您有与profile_id相关的其他验证,请务必小心,并检查是否存在特定错误消息。