sql - 创建ActiveRecord中是否不存在功能?

标签 sql ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.2

我正在使用Rails 3.2.8。如果状态记录尚不存在,则需要创建一个状态记录。如果状态记录存在,我什么也不做。所以我的代码是这样的:

user_level_status = UserLevelStatus.where(user_id: user_id, level_id: level_id).first
if !user_level_status
  UserLevelStatus.create(user_id: user_id, level_id: level_id, status: UserLevelStatus::READY)
end

在Rails/ActiveRecord中是否有更好的方法来处理此问题?有与find_or_create_by_等效的机制吗?我可以使用find_or_create_by_user_id并检查level_id吗?我只是舍弃结果,所以即使那样也不是很优雅。

最佳答案

就在这里。

滑轨3

user_level_status = UserLevelStatus.find_or_create_by_user_id_and_level_id(user_id, level_id)

Rails 4:
user_level_status = UserLevelStatus.find_or_create_by(user_id: user_id, level_id: level_id)

然后您应该设置default status in your model

关于sql - 创建ActiveRecord中是否不存在功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12527722/

相关文章:

ruby-on-rails - Rails - 是否使用多态来提高性能

javascript - 与rails3-jquery-autocomplete : don't know how to bind railsAutocomplete. select作斗争

ruby-on-rails - Ruby on Rails Routes - get 和 match 之间的区别

ruby-on-rails-3 - Rails 3 - 如何发送文件以响应 rails 中的远程表单?

SQL - 如何显示同龄学生?

MySQL获取表中每个N个元素的总和

mysql - rails : how do I test a helper method that executes a mysql query

ruby-on-rails - 安排 Rails 任务以安全备份数据库文件

sql - 如何将两个日期之间的差异四舍五入到小时

mysql - MySQL 中的 ROLLUP 和 ORDER BY