2013-02-27 2 views
1

У меня есть модель под названием «Match» и модель под названием «Bet»рельсы доступа включает в себя с has_many

class Match < ActiveRecord::Base 
    ... 
    has_many :bets 
end 

И моя модель Ставка:

class Bet < ActiveRecord::Base 
    attr_accessible :match_id, :user_id, :bet 
    ... 
    belongs_to :match 
    belongs_to :user 
end 

Я использую следующий код выберите некоторые совпадения и ставки пользователя вместе:

@matches = Match.includes(:bets).where("bets.user_id = ? or bets.user_id is NULL", @user.id) 

Как я могу получить доступ к ставкам пользователя с этим запросом?

Используя это не работает:

@matches.each do |match| 
    match.bet.bet 
    ... 

Как получить доступ к атрибуту ставки в игре?

Спасибо!


Попытка @sevenseacat ответ с этим кодом:

@user ||= User.find_by_id(params[:user_id]) if params[:user_id] 

    if @user 
    @matches = Match.includes(:home_team, :away_team, :bets).where("bets.user_id = ? or bets.user_id is NULL", @user.id) #.group_by{ |match| match.date.strftime("%d/%m/%y")} 

    @matches.each do |match| 
     match.bets.each do |bet| 
     bet.bet 
     end 
    end 
    end 

Я изменил его match.bets.first (у меня только 1 ставка для каждого match_id и user_id поэтому он работает).

ответ

2

Вы должны получить доступ к каждому матчу, просто сделав match.bets внутри вашего блока.

Если вы хотите повторить эти ставки, используйте другой each.

+0

Спасибо за ваш ответ. У каждого пользователя может быть только одна ставка для матча. Есть ли способ для пользователя match.bet? –

+0

По вашему коду, матч все еще имеет много ставок, но 'match.bets' будет содержать только правильные ставки. – sevenseacat

+0

Этот код печатает совпадение объекта, а не ставки. '@matches.each do | match | match.bets.each do | bet | ставка.bet конец конец' –

0

@sevenseacat прав
@match.bet.each { |bet| bet.attr } может быть хорошо для вас

Смежные вопросы