我最近开始在高尔夫网站上工作,遇到了一个我似乎无法理解的问题。我有两个模型,Event
模型和Round
模型。 Event
设置了一个或多个Rounds
。
class Event < ActiveRecord::Base
has_many :round
class Round < ActiveRecord::Base
belongs_to :event
在我的主页中,我想显示下一个事件,然后显示与事件相关的回合中的属性,例如start_time
,fees
等。在这种情况下,我们正在为即将到来的赛事打一轮比赛。
我能够获得下一个活动,但我不明白如何访问与活动相关的回合。
在我的HomeController
中,我有以下内容:
class HomeController < ApplicationController
layout "home"
def index
@event = Event.next
end
end
我的理解是拥有一个has_many和belongs_to关联将允许我在我的视图中使用@event.rounds.start_time
这样的实例来获取与{{1}的实例关联的回合的start_time
}。
我错过了什么?
谢谢,
备注
答案 0 :(得分:1)
@event.rounds
是一个数组。如果要从数组中获取第一个元素的start_time
- 请使用@event.rounds.first.start_time
。或者您可以通过以下方式获取所有开始时间:@event.rounds.map(&:start_time)
。
同时在事件模型中将has_many :round
更改为has_many :rounds
。
答案 1 :(得分:0)
@Speransky Danil - 这没用,但是我能够使用以下内容进行解决,尽管我觉得我有一个额外的数据库调用。
@event = Event.find(Event.next)
正如我之前提到的,如果我通过ID进行查找,我可以访问与事件关联的回合,但如果我尝试使用下面的范围,我就不能。
范围:接下来,lambda {where('start_date&gt; =?',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。
答案 2 :(得分:0)
我明白了。
我的事件调用Event.next将检索一个数组,即使我限制为1条记录。所以基于此我不得不改变我的呼吁:
@ event.first.rounds.first.start_time