Ruby on rails Rails:find_或create_的等价项,在保存之前不会持久

Ruby on rails Rails:find_或create_的等价项,在保存之前不会持久,ruby-on-rails,Ruby On Rails,我当前正在使用此代码块检索用户或创建新用户: user = User.find_or_create_by!(email:params[:email]) 但是,我不一定要将新用户持久化到数据库中 是否有类似于“查找”或“新建”这样的内容只会持续到: user.save 试试这个 user = User.where(email: params[:email]).first_or_initialize 如果它不存在,它将只是初始化它。您似乎在寻找它。命名方法不调用create,而是调用new。要

我当前正在使用此代码块检索用户或创建新用户:

user = User.find_or_create_by!(email:params[:email])
但是,我不一定要将新用户持久化到数据库中

是否有类似于“查找”或“新建”这样的内容只会持续到:

user.save
试试这个

user = User.where(email: params[:email]).first_or_initialize

如果它不存在,它将只是初始化它。

您似乎在寻找它。命名方法不调用
create
,而是调用
new
。要保存对象(假设已初始化且未找到),您将根据需要调用
save

如果你看一下这个方法的源代码,它正是你想要的

def find_or_initialize_by(attributes, &block)
  find_by(attributes) || new(attributes, &block)
end

在我提供的带有方法链接的文档页面上,我找不到该方法的bang(
)版本。使用爆炸将引发错误。根据您的使用情况,您可能根本不需要它。

不确定是否发生了什么新情况,但这可能会更好地解释。如果你能找到一个更好的解决方案,那可能值得修改。