You need to enable JavaScript to run this app. Rails 5中如何将find_or_create_by()方法拆分为两个独立操作?
优惠活动
大模型
产品
解决方案
定价
更多

Rails 5中如何将find_or_create_by()方法拆分为两个独立操作?

Ruby on Rails 中find_or_create_by的拆分等价写法

Rails 框架中find_or_create_by的核心逻辑是:先根据传入的参数匹配查询记录,若未查询到匹配记录则用对应参数创建新记录,和你熟悉的LaravelfirstOrCreate逻辑完全一致,拆分后的等价写法如下:

基础通用版本(对应单条件查询示例)

# 第一步:按条件查询记录
user = MyModelObject.find_by(user: object.provider)
# 第二步:记录不存在时创建新记录
user ||= MyModelObject.create(user: object.provider)

多参数版本(对应Laravel多字段示例)

和你贴出的Laravel两步写法逻辑完全对齐的Rails写法:

# 第一步:按指定条件查询记录
user = MyModelObject.find_by(id: user['id'])
# 第二步:查询结果为空时创建新记录
if user.nil?
  user = MyModelObject.create(id: user['id'], name: user['name'])
end

注意事项

要注意不要用find方法替代find_by:find是主键查询方法,未匹配到记录时会直接抛出ActiveRecord::RecordNotFound异常,而find_or_create_by内部默认使用find_by做查询,未匹配时返回nil不会抛异常,二者行为不同。

内容的提问来源于stack exchange,提问作者Lloyd Banks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 13:33:00