访问对象相关模型的属性

时间:2013-05-29 06:00:56

标签: ruby-on-rails ruby associations models

我最近开始在高尔夫网站上工作,遇到了一个我似乎无法理解的问题。我有两个模型,Event模型和Round模型。 Event设置了一个或多个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这样的实例来获取与{{1}的实例关联的回合的start_time }。

我错过了什么?

谢谢,

备注

3 个答案:

答案 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