【问题标题】:Rails: Get the data from a specific column?Rails:从特定列获取数据?
【发布时间】:2012-06-30 03:18:17
【问题描述】:

我只想从特定列中提取数据,但返回的是整个记录。

我进入我的控制台尝试查看引擎盖下发生了什么,但结果让我感到困惑。

如何只返回每条记录的状态?

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

我基于 ryan bates 多态关联代码 https://github.com/railscasts/154-polymorphic-association-revised/tree/master/blog-after

【问题讨论】:

    标签: ruby-on-rails activerecord codeblocks polymorphic-associations


    【解决方案1】:

    Rails 3.1 或更高版本为这个company.requests.pluck(:status) 引入了pluck 方法。这会查询数据库的状态并返回一个数组。

    在旧版本中,您可以使用company.requests.select(:status).map(&amp;:status),在这里您为每个请求实例化一个模型,然后只提取状态,这会花费更多。

    【讨论】:

    • 但是我不应该在每次迭代中将其作为 .status 方法调用吗?
    • 你是,只是控制台正在返回它看到的最后一个对象,它实际上是 company.requests 的整个块。如果您将其更改为 map 而不是 each,您将只获得返回的状态。如果您只是想看看它如何更好地工作,请调用 puts request.status 在行中以获取输出状态
    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 2019-12-07
    • 2019-07-03
    • 1970-01-01
    相关资源
    最近更新 更多