これに出くわした場合、私はこれにpluckを使用するので、両方の答えを確認してください
私はかなり大きなカスタムデータセットを持っているので、jsonとしてエコーアウトするために戻りたいです。 1つの部分は次のとおりです。
l=Location.find(row.id)
tmp[row.id]=l
しかし、私は次のようなことをしたいです:
l=Location.find(row.id).select("name, website, city")
tmp[row.id]=l
しかし、これは機能していないようです。これをどのように機能させるのですか?
どうも
編集1
別の方法として、含める属性のみの配列を渡す方法はありますか?
l = Location.find(:id => id, :select => "name, website, city", :limit => 1)
...または...
l = Location.find_by_sql(:conditions => ["SELECT name, website, city FROM locations WHERE id = ? LIMIT 1", id])
このリファレンスドキュメント は、.find
で使用できるオプションのリスト全体を提供します。これには、番号、ID、またはその他の任意の列/制約による制限方法が含まれます。
l = Location.where(["id = ?", id]).select("name, website, city").first
これらのチェーンされた呼び出しの順序を入れ替えて、.select(...).where(...).first
を実行することもできます。これらの呼び出しはすべて、SQLクエリを作成して送信します。
pluck(column_name)
このメソッドは、直接SQLクエリとして単一の列による選択を実行するように設計されています。指定された列名の値を持つ配列を返します。値は列と同じデータ型を持ちます。
例:
Person.pluck(:id) # SELECT people.id FROM people
Person.uniq.pluck(:role) # SELECT DISTINCT role FROM people
Person.where(:confirmed => true).limit(5).pluck(:id)
http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck を参照してください
3.2以降でRailsが導入され、単一の列のみを受け入れます。 Rails 4では、複数の列を受け入れます
私はかなり新しい開発者なので、私の答えはかなり遅れています。これはあなたができることです:
Location.select(:name, :website, :city).find(row.id)
ところで、これはRails 4