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

Ruby on rails 如果存在记录,如何设置变量,ruby-on-rails,ruby,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 两个版本都非常好。使用后者是很常见的,因为它更简洁。但是,为了可读性,您可能需要使用 if (@tag = Tag.find

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

@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

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

if (@tag = Tag.find_by_name(tag))
这是没有必要的,但它使您更清楚地知道您是在做作业,而不是比较

if @tag == Tag.find_by_name(tag)
将其包装到括号中更为明确。它说,分配,然后评估结果

此外,如果您实际上不需要标记对象本身,并且只关心存在性,那么您可能希望使用
exist?

if Tag.exists?(name: tag)

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

我喜欢第一种方法。…+1在条件测试中赋值是一个等待中的维护错误;人们用C和Perl来做这件事,但是,除非对它进行了很好的注释,否则后面的人可能不理解它应该是一个赋值,而不是一个比较。最好在前面的步骤中指定,然后进行比较,这会使意图更加明显。谢谢Simon。Tag.exists?(名称:Tag)为我和Tag.where(名称:Tag.exist)工作?没有。你知道为什么会有语法上的差异吗?语法可能已经改变了,我应该看看API。