ruby-on-rails - 在 Rails 中,如何将新对象替换为现有对象?

标签 ruby-on-rails ruby model

我有以下嵌套模型关系:

  • 国家(ID、名称)
    • 省份(id、country_id、名称)
      • 城市(id、province_id、名称)

我对关系中每个模型的名称字段都有 validates_uniqueness_of 约束,对数据库中的名称列有唯一索引。

我想在验证之前的某个时间点交换一个与现有记录同名的新对象。换句话说,如果用户尝试添加已经添加的城市、省份、国家/地区组合,我希望国家/地区模型返回对相应现有模型记录的引用,而不是在保存前验证失败。

我在使用模型回调(after_initializebefore_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_XXXfind_or_initialize_by_XXX 函数,所以不需要在模型中添加函数。有关详细信息,请参阅 http://api.rubyonrails.org/classes/ActiveRecord/Base.html 的“基于动态属性的查找器”部分

关于ruby-on-rails - 在 Rails 中,如何将新对象替换为现有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6171256/

相关文章:

javascript - Ember.js:一个模型如何观察其他模型?

swift - 为什么我的模型不在 View Controller 中显示其成员?

jquery - 使用 asset pipeline 和 pjax 时未捕获的 ReferenceError

ruby-on-rails - rails : Expected. 。定义 Account_number

ruby - 如何使用 FileLists 作为 rake 依赖项

mysql - Ruby on Rails 迁移,两个主键,但只有一个自动递增

java - 带有 DefaultComboBoxModel 的 JComboBox 不允许添加或删除

ruby-on-rails - 如何使用 ruby​​ 在新窗口中打开链接?

ruby-on-rails - 如何更改 Rails 3.x 迁移中新列的位置

ruby-on-rails - 如何在 Rails 中使用 JBuilder 对 JSON 哈希进行编码?