Ruby条件如果其他分配

Noz*_*Noz 1 ruby refactoring ruby-on-rails-3

所以我有以下代码,我想让它更具可读性:

user = User.find_by_username(username)
user = User.new(credentials) if user.nil?
Run Code Online (Sandbox Code Playgroud)

基本上第一行是默认行,如果尚未设置,则以下行将实例化自身.

有没有办法可以清理它并将其放到一行代码中?这样的事情可能是:

user = User.find_by_username(username) || User.new(credentials)
Run Code Online (Sandbox Code Playgroud)

编辑

我现在认识到我提供的代码不正是我需要的,对不起,浪费网络空间,但随时提出替代解决方案.

Gra*_*ins 5

是的,你写的是完全正确的答案.

你也可以这样写,如果愿意的话:

user = User.find_by_username(username)
user ||= User.new(credentials)
Run Code Online (Sandbox Code Playgroud)

请记住,如果第一个是你的第一个例子将只分配了第二个值nil,但你的第二个例子以上我的例子将分配双方的第二个值nilfalse.

编辑:正如其他人所提到的,如果您正在使用Active Record,您还可以使用基于动态属性的查找程序

user.find_or_initialize_by_username(credentials)
Run Code Online (Sandbox Code Playgroud)