真的很困惑。
我一直在阅读导轨指南,似乎有不同的方法来引用轨道中的列。有时候它就像一个字符串,例如
Client.select("viewable_by, locked")
有时在开头有一个冒号
Client.select(:name).uniq
我何时决定使用哪个?这些可以互换吗?
答案 0 :(得分:2)
如果它是一个字符串,它将被注入到sql语句中,这允许你做一些高级SQL-y的东西,比如
select("count(name) as name_count, nvl(price, 'N/A')")
(这只是一个例子,将一些东西混合在一起)
如果你想选择一些列,我会一直使用符号或符号数组,比如
Client.select(:viewable_by, :locked)
所以简而言之:是的,它们是可以互换的,字符串不会被解析,只是注入到SQL语句中,这允许你在需要时做一些更高级的东西。
答案 1 :(得分:1)
是的,它们是可以互换的。它们返回相同的结果 - 即包含仅请求设置的字段的模型实例的ActiveRecord Relation。
Client.select("viewable_by, locked")
=> [#<Client id: nil, viewable_by: "admin", locked: true>]
Client.select(:viewable_by, :locked)
=> [#<Client id: nil, viewable_by: "admin", locked: true>]
我已经做出了回应,但你明白了。
如果你只是想要一个名字的数组我会选择使用:
Client.pluck(:name).uniq