2013-05-29 108 views
0

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

class Event < ActiveRecord::Base 
    has_many :round 

class Round < ActiveRecord::Base 
    belongs_to :event 

在我的主页,我想显示下一个事件,然后显示从事件如start_timefees等。在这种情况下,我们只玩一个相关联的轮(S)属性即将举行的活动。

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

在我HomeController,我有以下几点:

class HomeController < ApplicationController 
    layout "home" 

    def index 
     @event = Event.next 
    end 
end 

据我了解,有一个的has_many和belongs_to的关联将允许我使用在我看来像@event.rounds.start_time实例来获取start_time为圆与@event的实例关联。

我错过了什么?

谢谢,

备注

回答

1

@event.rounds是一个数组。如果要获取阵列中第一个元素的start_time - 请使用@event.rounds.first.start_time。或者您可以通过以下方式获得所有开始时间:@event.rounds.map(&:start_time)。在事件模型中还将has_many :round改为has_many :rounds

+0

感谢您的快速响应SD。我尝试过,但我一直在为#获取未定义的方法。我在Rounds表中有event_id。 – Memo

+0

再次感谢。我确实有event_id,我想我正在接近这个问题。如上所述,如果使用Event.find(1)发现“@event”,我能够成功地调用“@ events.rounds.first.start_time”。我一直在做的是调用我在事件模型中定义的名为“next”的范围。范围:next,lambda {where('start_date> =?',Date.today).limit(1)}。显然,这不包括我与轮的关联。 – Memo

0

@Speransky Danil - 这没有奏效,但我能够解决以下问题,尽管我觉得我有一个额外的数据库调用。

@event = Event.find(Event.next)

正如我前面提到的,如果我的ID做一个发现我能够与事件访问几轮交往,但如果我尝试使用范围比如下面的那个,我不能。

范围:下,λ-{其中(,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,我现在要做这件事。

0

我明白了。

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

@ event.first.rounds.first.start_time