Rails:find_or_create_by等效,直到保存才会持续存在

时间:2015-07-20 21:28:14

标签: ruby-on-rails

我目前正在使用此代码块来检索用户或创建一个新用户:

user.save

但是,我不一定希望将新用户持久保存到数据库中。

是否有类似“find_or_new_by”的东西只会持续存在:

<a href="#section1">sec1</a>
<a href="#section2">sec2</a>
<a href="#section3">sec3</a>

2 个答案:

答案 0 :(得分:7)

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

如果您查看该方法的源代码,它完全您正在寻找的内容!

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

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

答案 1 :(得分:1)

试试这个

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

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