0

我最近开始在一个高尔夫网站上工作,遇到了一个我似乎无法理解的问题。我有两个模型,一个Event模型和一个Round模型。AnEvent设置有一个或多个Rounds

class Event < ActiveRecord::Base
    has_many :round

class Round < ActiveRecord::Base
    belongs_to :event

在我的主页中,我想显示下一个事件,然后显示与该事件相关的回合的属性,例如start_timefees等。在这种情况下,我们只为即将到来的事件打一轮。

我能够获得下一个事件,但我不明白如何访问与事件相关的回合。

在我的HomeController中,我有以下内容:

class HomeController < ApplicationController
    layout "home"

    def index
        @event = Event.next
    end
end

我的理解是,拥有 has_many 和 belongs_to 关联将允许我在我看来使用该实例,例如@event.rounds.start_time获取start_time@event.

我错过了什么?

谢谢,

备忘录

4

3 回答 3

1

@event.rounds是一个数组。如果start_time要从数组中获取第一个元素的第一个 - 使用@event.rounds.first.start_time. 或者您可以通过以下方式获取所有开始时间:@event.rounds.map(&:start_time).

在事件模型中也更改has_many :round为。has_many :rounds

于 2013-05-29T06:05:51.023 回答
0

@Speransky Danil - 那不起作用,但我能够使用以下方法解决问题,尽管我觉得我对数据库有额外的调用。

@event = Event.find(Event.next)

正如我之前提到的,如果我通过 ID 进行查找,我可以访问与该事件相关的回合,但如果我尝试使用如下所示的范围,则不能。

范围 :next, lambda { where('start_date >= ?', Date.today).limit(1) }

这是我不断收到的错误。

     NoMethodError: undefined method `rounds' for #<ActiveRecord::Relation:0x007fa40f3bdcf0>
from /Users/Memo/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.13/lib/active_record/relation/delegation.rb:45:in `method_missing'
from (irb):24
from /Users/Memo/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start'
from /Users/Memo/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start'
from /Users/Memo/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.13/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

我现在将继续这样做,以便继续并添加一个 TODO。

于 2013-05-29T15:29:06.723 回答
0

我知道了。

即使我限制为 1 条记录,我的事件调用 Event.next 也会检索一个数组。因此,基于此,我不得不将调用更改为:

@event.first.rounds.first.start_time

于 2013-05-29T15:45:08.423 回答