使用Scope时,应该何时使用散列符号与字符串?

时间:2011-09-16 14:50:35

标签: ruby-on-rails ruby-on-rails-3 scope named-scope

我刚刚开始熟悉范围,我发现它们可以使用字符串OR哈希表示法编写。

rails docs的示例:

scope :dry_clean_only, joins(:washing_instructions).where('washing_instructions.dry_clean_only = ?', true)

这也可以写成:

scope :dry_clean_only, joins(:washing_instructions).where(:washing_instructions => { :dry_clean_only => true })
  • 您如何选择使用哪一个?
  • 是否有表现 意味着什么?
  • 有“铁路”吗? (文档类似于两者 用法)

谢谢!

2 个答案:

答案 0 :(得分:0)

至于选择哪一个,这确实是一个偏好问题。我个人更喜欢哈希语法,因为您可以扫描它并轻松查看哪些列适用于哪些列。哈希语法仅适用于相等查询,因此无论如何您都需要使用字符串格式进行更复杂的查询。

我愿意打赌,因为它被转换为SQL查询所以性能差异可以忽略不计。点击数据库并处理结果将是大多数处理时间发生的地方,并且在两种情况下都是相同的。

如果您想对它们进行基准测试,可以使用rails基准测试。

rails benchmarker "Model.joins(:washing_instructions).where('washing_instructions.dry_clean_only = ?', true)" "Model.joins(:washing_instructions).where(:washing_instructions => { :dry_clean_only => true })"

答案 1 :(得分:0)

我个人尽可能尝试使用哈希语法,并在不可避免的情况下使用字符串。

scope :plus_size, where(:plus_size => true)

scope :similar_name, lambda{ |name| where('name LIKE ?', "%#{name}%") }

我担心编写错误的SQL,所以写的越少越好(例如上面的示例,它不会在字符串中转义额外的%)。