1

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

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

本质上第一行是默认的,如果还没有设置,下面的行会实例化自己。

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

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

编辑

我现在意识到我提供的代码完全符合我的需要,很抱歉浪费了网络空间,但请随时提出替代解决方案。

4

2 回答 2

5

是的,你写的正是正确的答案。

如果愿意,您也可以这样写:

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

请记住,如果第一个示例是 ,则您的第一个示例只会分配第二个值nil,但是您的第二个示例和我上面的示例将同时为niland分配第二个值false

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

user.find_or_initialize_by_username(credentials)
于 2012-10-12T22:14:11.537 回答
3

它更容易做到

user.find_or_create_by_name(credentials)

并且凭据将在那里有用户名

通过多个属性查看Rails find_or_create?

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

于 2012-10-12T22:16:24.283 回答