Ruby rails - 从数据库中只选择几列

Kap*_*h M 50 ruby ruby-on-rails ruby-on-rails-3 rails-activerecord

在rails中构造sql查询以仅从数据库中选择某些列的方式是什么,我有一些大数据字段,我希望避免从连续的定期ajax调用中加载.不必要地阅读是资源消耗和缓慢.

@itemlist = Item.find(:all, :conditions => { .... } ) #this select all columns 
Run Code Online (Sandbox Code Playgroud)

我正在寻找SELECT name, address FROM users;而不是SELECT * FROM users;

nya*_*yaa 110

Rails 3:

Item.select("name, address").where( .... )

  • 另外值得注意的是,如果在`SELECT`语句中有多个表,并且您引用的列可能存在于多个表中,请在select中包含该表,如`select("items.name,users) .地址")`. (2认同)

dku*_*mar 26

利用:select构造.试试这个:

@itemlist = Item.select('name, address', conditions: { .... } )
Run Code Online (Sandbox Code Playgroud)

对于以前版本的Rails:

@itemlist = Item.find(:all,:select => 'name, address', :conditions => { .... } )
Run Code Online (Sandbox Code Playgroud)

  • 这不再正确,Rails 4不支持.答案需要更新. (5认同)

Mic*_*ley 10

使用Arel(也就是在Rails 3中),使用:

Item.where(...).select("name, address")
Run Code Online (Sandbox Code Playgroud)

此外,如果你在具有:include =>的范围上进行操作,似乎会忽略.select ...


小智 6

@itemlist = Item.select('name, address').where(...#some condition)
Run Code Online (Sandbox Code Playgroud)


eri*_*mon 6

如果要从 中选择特定列rails consolepluck(将起作用。例子:

2.4.1 :007 > User.connection
2.4.1 :006 > User.all.pluck(:email)
   (0.3ms)  SELECT `users`.`email` FROM `users`
 => ["test@test.com", "another_test@test.com"] 
Run Code Online (Sandbox Code Playgroud)

请注意,这也适用于 Rails 应用程序。