如何在rails活动记录界面中引用数据库列

时间:2015-07-16 08:52:25

标签: ruby-on-rails

真的很困惑。

我一直在阅读导轨指南,似乎有不同的方法来引用轨道中的列。有时候它就像一个字符串,例如

Client.select("viewable_by, locked")

有时在开头有一个冒号

Client.select(:name).uniq

我何时决定使用哪个?这些可以互换吗?

2 个答案:

答案 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