当使用带有Rails 3的where方法时,活动记录::关系而不是对象的类

时间:2012-02-17 21:08:03

标签: ruby-on-rails-3 activerecord

我试图在调用.where查询后获取对象的属性。查询如下:

    @matchers = TutoringSession.where(:begin_time_hour => 21).limit(5)

结果我得到了一系列辅导课程。但我希望能够只返回每个匹配辅导课程的特定属性。所以我在视图中有以下代码:

    @matchers.each do |matcher|
       matcher.begin_time_hour
    end

不是列出匹配器的begin_time_hour属性,而是列出每个匹配器对象的所有属性。我试过这个块尝试“puts matchers.begin_time_hour”,并尝试使用partials来解决这个问题,但是我一直遇到问题。如果我问@matcher.class,它说,它是ActiveRecord :: Relation对象。我认为这将是一个TutoringSession对象。

以下是我的模型,如果有帮助的话。

    require 'date'
    class TutoringSession < ActiveRecord::Base
        belongs_to :refugee
        belongs_to :student

        before_save :set_day_and_time_available, :set_time_available_hour_and_day

        attr_accessor :begin_time, :book_level, :time_open

        attr_accessible :time_open, :day_open, :tutoring_sessions_attributes,  :page_begin, :begin_time

我的其他课程如下

    require 'date'
    require 'digest'

    class Refugee < ActiveRecord::Base
    has_many :tutoring_sessions
    has_many :students, :through => :tutoring_sessions
    accepts_nested_attributes_for :tutoring_sessions, :allow_destroy => true

    attr_accessible :name, :email, :cell_number, :password, :password_confirmation,   :day_open, :time_open, :tutoring_sessions_attributes 

如果您需要更多信息,请与我们联系。谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

看起来你没有向视图输出任何东西。致电

@matchers.each do |matcher|
   matcher.begin_time_hour
end

你得到的结果是运行循环,这是关系,而不是数据。您正在访问begin_time_hour,但您没有对此进行任何操作。你需要更像这样的东西来显示begin_time_hour字段。

<% @matcher.each do |matcher| %>
  <%= matcher.begin_time_hour %>
<% end %>

顺便说一下,@matchers应该是一个ActiveRecord::Relation对象,它是从wherelimit子句生成的sql查询的表示。在关系上调用all使其成为TutoringSession个对象的数组

@matchers = TutoringSession.where(:begin_time_hour => 21).limit(5).all

调用each隐式运行查询并迭代TutoringSession个对象,因此您不必担心这一点。