0

特定の列からのみデータを取得したいのですが、返されるのはレコード全体です。

ボンネットの下で何が起こっているのかを確認するためにコンソールにアクセスしましたが、結果は私を混乱させます.

各レコードのステータスだけを返すにはどうすればよいですか?

1.9.3p194 :001 > company = Company.first
Company Load (0.1ms)  SELECT "companies".* FROM "companies" LIMIT 1
=> #<Company id: 1, name: "Supreme WIndows", created_at: "2012-06-24 04:12:02", updated_at: "2012-06-24 04:12:02"> 
1.9.3p194 :002 > company.requests
Request Load (0.1ms)  SELECT "requests".* FROM "requests" WHERE "requests"."requestable_id"    = 1 AND "requests"."requestable_type" = 'Company'
=> [#<Request id: 1, status: nil, requestable_id: 1, requestable_type: "Company", created_at: "2012-06-30 01:25:11", updated_at: "2012-06-30 01:25:11", profile_id: nil>, #
     <Request id: 2, status: nil, requestable_id: 1, requestable_type: "Company", created_at: "2012-06-30 01:28:16", updated_at: "2012-06-30 01:28:16", profile_id: nil>, #
     <Request id: 3, status: nil, requestable_id: 1, requestable_type: "Company", created_at: "2012-06-30 01:32:55", updated_at: "2012-06-30 01:32:55", profile_id: nil>, #
     <Request id: 4, status: nil, requestable_id: 1, requestable_type: "Company", created_at: "2012-06-30 02:46:07", updated_at: "2012-06-30 02:46:07", profile_id: nil>] 
1.9.3p194 :003 > company.requests.status
NoMethodError:   Request Load (0.2ms)  SELECT "requests".* FROM "requests" WHERE "requests"."requestable_id" = 1 AND "requests"."requestable_type" = 'Company'
undefined method `status' for #<ActiveRecord::Relation:0x007fdbd57e1ba8>
from /Users/Aaron/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.3/lib/active_record/relation/delegation.rb:45:in `method_missing'
from /Users/Aaron/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.3/lib/active_record/associations/collection_proxy.rb:100:in `method_missing'
from (irb):3
from /Users/Aaron/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.3/lib/rails/commands/console.rb:47:in `start'
from /Users/Aaron/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.3/lib/rails/commands/console.rb:8:in `start'
from /Users/Aaron/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.3/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
1.9.3p194 :004 > company.requests.first.status
=> nil 
1.9.3p194 :005 > company.requests.each do |request|
1.9.3p194 :006 >     request.status
1.9.3p194 :007?>   end
=> [#<Request id: 1, status: nil, requestable_id: 1, requestable_type: "Company", created_at: "2012-06-30 01:25:11", updated_at: "2012-06-30 01:25:11", profile_id: nil>, # 
     <Request id: 2, status: nil, requestable_id: 1, requestable_type: "Company", created_at: "2012-06-30 01:28:16", updated_at: "2012-06-30 01:28:16", profile_id: nil>, #
     <Request id: 3, status: nil, requestable_id: 1, requestable_type: "Company", created_at: "2012-06-30 01:32:55", updated_at: "2012-06-30 01:32:55", profile_id: nil>, #
     <Request id: 4, status: nil, requestable_id: 1, requestable_type: "Company", created_at: "2012-06-30 02:46:07", updated_at: "2012-06-30 02:46:07", profile_id: nil>] 
1.9.3p194 :008 > 

MCV のコードはすべて、次の質問 Rails: How to create polymorphic relationship/friendship model にあります。

私はライアン・ベイツのポリモーフィック連想コードに基づいています https://github.com/railscasts/154-polymorphic-association-revised/tree/master/blog-after

4

1 に答える 1

3

Rails 3.1 以降ではpluck、まさにこのためのメソッドが導入されましたcompany.requests.pluck(:status)。これは、ステータスのみを DB に照会し、配列を返します。

古いバージョンでは、ユーザーが使用できますcompany.requests.select(:status).map(&:status)。ここでは、リクエストごとにモデルをインスタンス化し、ステータスを引き出すだけで、コストがはるかに高くなります。

于 2012-06-30T03:22:18.587 に答える