我有以下嵌套模型关系:
- 国家(ID、名称)
- 省份(id、country_id、名称)
- 城市(id、province_id、名称)
- 省份(id、country_id、名称)
我对关系中每个模型的名称字段都有 validates_uniqueness_of
约束,对数据库中的名称列有唯一索引。
我想在验证之前的某个时间点交换一个与现有记录同名的新对象。换句话说,如果用户尝试添加已经添加的城市、省份、国家/地区组合,我希望国家/地区模型返回对相应现有模型记录的引用,而不是在保存前验证失败。
我在使用模型回调(after_initialize
、before_validation
等)时遇到问题,而且我无法获得 Country.find_or_initialize_by_name
使用嵌套模型...有什么建议吗?
最佳答案
您尝试做的事情听起来很难,可能需要您了解 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 的“基于动态属性的查找器”部分
关于ruby-on-rails - 在 Rails 中,如何将新对象替换为现有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6171256/