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。