Ruby条件如果其他分配

时间:2012-10-12 22:10:04

标签: ruby ruby-on-rails-3 refactoring

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

user = User.find_by_username(username)
user = User.new(credentials) if user.nil?

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

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

user = User.find_by_username(username) || User.new(credentials)

修改

我现在意识到我提供的代码完全符合我的需要,对于浪费网络空间感到遗憾,但可以随意提出替代解决方案。

2 个答案:

答案 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)

和凭据将有用户名

请参阅Rails find_or_create by more than one attribute?

http://api.rubyonrails.org/classes/ActiveRecord/Base.html