如果记录存在,如何设置变量

时间:2014-01-27 14:27:43

标签: ruby-on-rails ruby

在“创建”对象之前检查记录是否存在的最佳方法是什么?

@tag = Tag.find_by_name(tag)
if @tag
 do_something
else
 do_something_else
end

你能做到:

if @tag = Tag.find_by_name(tag)
 do_something
else
 do_something_else
end

1 个答案:

答案 0 :(得分:10)

两个版本都很好。使用后者是很常见的,因为它更简洁。但是,为了便于阅读,您可能需要使用

if (@tag = Tag.find_by_name(tag))

这不是必要的,但是它使你更明确地进行作业而不是比较。

if @tag == Tag.find_by_name(tag)

将其包含在括号中更为明确。它说,分配,然后评估结果。

此外,如果您实际上并不需要标记对象本身,而您只关心存在,则可能需要使用exist?

if Tag.exists?(name: tag)

这更快,因为它使用SELECT COUNT SQL查询而不是完整的SELECT。它基本上不会实例化记录。