我正在使用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

10-08 06:48