Railsでデータベースから特定の列のみを選択するようにSQLクエリを構成するには、連続した定期的なAjax呼び出しからの読み込みを避けたいいくつかの大きなデータフィールドがあります。時間がかかります。
@itemlist = Item.find(:all, :conditions => { .... } ) #this select all columns
を探しています SELECT name, address FROM users;
の代わりに SELECT * FROM users;
Rails 3:
Item.select("name, address").where( .... )
:select
コンストラクトを使用します。これを試して:
@itemlist = Item.select('name, address', conditions: { .... } )
以前のバージョンのRailsの場合:
@itemlist = Item.find(:all,:select => 'name, address', :conditions => { .... } )
Arel(別名Rails 3)を使用して、以下を使用します。
Item.where(...).select("name, address")
また、:include => ...を持つスコープを追加すると、.selectは無視されるようです。
@itemlist = Item.select('name, address').where(...#some condition)
これを試して:
@itemlist = Item.find(:all, :select => "name, address", :conditions => { .... } )
Rails console
から特定の列を選択する場合は、pluck(
が機能します。例:
2.4.1 :007 > User.connection
2.4.1 :006 > User.all.pluck(:email)
(0.3ms) SELECT `users`.`email` FROM `users`
=> ["[email protected]", "[email protected]"]
これはRailsアプリからも機能することに注意してください。