所以我有以下代码,我想让它更具可读性:
user = User.find_by_username(username)
user = User.new(credentials) if user.nil?
基本上第一行是默认行,如果尚未设置,则以下行自我实例化。
有没有办法可以清理它并将其放到一行代码中?这样的事情可能是:
user = User.find_by_username(username) || User.new(credentials)
修改
我现在意识到我提供的代码完全符合我的需要,对于浪费网络空间感到遗憾,但可以随意提出替代解决方案。
答案 0 :(得分:5)
是的,你写的正是答案。
如果愿意,您也可以这样写:
user = User.find_by_username(username)
user ||= User.new(credentials)
请注意,如果第一个示例为nil
,则您的第一个示例将仅指定第二个值,但您的第二个示例和我上面的示例将在nil
和{{}上分配第二个值1}}。
编辑:正如其他人所说,如果您正在使用Active Record,您还可以使用dynamic attribute-based finder
false
答案 1 :(得分:3)
更容易做到
user.find_or_create_by_name(credentials)
和凭据将有用户名