Активная запись :: отношение вместо класса объекта при использовании метода where с Rails 3 - PullRequest
0 голосов
/ 18 февраля 2012

Я пытаюсь получить атрибуты объектов после вызова запроса .where.Запрос следующий:

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

В результате я получаю массив сессий обучения.Но я хотел бы иметь возможность возвращать только определенные атрибуты каждого из соответствующих сеансов обучения.Таким образом, у меня есть следующий код:

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

Вместо перечисления каждого из атрибутов begin_time_hour matcher, это все атрибуты для каждого объекта matcher.Я экспериментировал с этим блоком, пытаясь «ставить matchers.begin_time_hour», а также пытался использовать партиалы для решения этой проблемы, однако продолжаю сталкиваться с проблемами.Если я спрашиваю @ 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

end

, а мой другой класс - следующий

    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 

end

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.Спасибо за помощь!

1 Ответ

0 голосов
/ 18 февраля 2012

Похоже, вы ничего не выводите в представление.Вызвав

@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 объектом, представляющим запрос sql, который будет сгенерированиз пунктов where и limit.Вызов all для отношения с делает его массивом TutoringSession объектов

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

Вызов each неявно запускает запрос и выполняет итерации по TutoringSession объектам, поэтому вам не нужнобеспокойтесь об этом, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...