我有以下嵌套模型关系:
我对关系中每个模型的名称字段有validates_uniqueness_of
约束,对数据库中的名称列有唯一索引。
我希望在验证之前的某个时刻交换使用与现有记录相同名称创建的新对象。换句话说,如果用户尝试添加已添加的城市,省份,国家/地区组合,我希望国家/地区模型返回对相应现有模型记录的引用,而不是在保存之前验证失败。
我在使用模型回调(after_initialize
,before_validation
等)时遇到问题,而我无法让Country.find_or_initialize_by_name
使用嵌套模型...有什么建议吗?
答案 0 :(得分:1)
您要做的事情听起来很难,可能需要您了解ActiveRecord::Base
的许多内部实施细节。
相反,你能做这样的事吗?
@country = Country.find_or_initialize_by_name(params[:name])
...
@country.save
修改强>
ActiveRecord内置了find_or_create_by_XXX
和find_or_initialize_by_XXX
函数,因此无需向模型添加函数。有关详细信息,请参阅http://api.rubyonrails.org/classes/ActiveRecord/Base.html