我刚刚开始熟悉范围,我发现它们可以使用字符串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 })
谢谢!
答案 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,所以写的越少越好(例如上面的示例,它不会在字符串中转义额外的%)。