在“创建”对象之前检查记录是否存在的最佳方法是什么?
@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
答案 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
。它基本上不会实例化记录。