我一直在阅读有关Rails主动记录模型操作的教程。我对.select和.group之间的区别感到有点困惑。如果我想在表格中获取所有用户的所有名称,我相信我能做到:
myUsers = User.select(:name)
那怎么会说:
myUsers = User.group(:name)
感谢,
威尔
答案 0 :(得分:2)
两者的不同之处在于:
User.select(:name)
等同于此SQL语句
SELECT name from users;
和
User.group(:name)
相当于
SELECT * from users GROUP BY name;
与select(:name)
不同的是,您按id
排序所有行,但仅限列name
。使用group(:name)
,您将获取所有列和,但按列name
排序。
User.pluck(:name)
将是从数据库中提取所有名称的最快方法。
答案 1 :(得分:1)
有#to_sql
方法来检查它正在构建的 DB 查询。通过查看数据库查询,您可以确认自己发生了什么。看下面的例子: -
arup@linux-wzza:~/Rails/tv_sms_voting> rails c
Loading development environment (Rails 4.1.4)
>> Vote.group(:choice).to_sql
=> "SELECT \"votes\".* FROM \"votes\" GROUP BY choice"
>> Vote.select(:choice).to_sql
=> "SELECT \"votes\".\"choice\" FROM \"votes\""
>>
现在很明显Vote.select(:choice)
实际上是SELECT "votes"."choice" FROM "votes"
,这意味着,从表choice
的所有行中选择votes
列。
Vote.group(:choice)
根据列votes
对choice
表的行进行分组,并选择所有列。
如果我想在表User中获取所有用户的所有名称。
最好的是User.pluck(:name)
。