2013-05-29 107 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