У меня есть три модели: RaceCards, Races and Wagers.Как применить динамические условия к Rails 3 has_many: через ассоциацию
class RaceCard < ActiveRecord::Base
has_many :races
has_many :wagers
end
class Race < ActiveRecord::Base
belongs_to :race_card
has_many :wagers, :through => :race_card
end
class Wager < ActiveRecord::Base
belongs_to :race_card
has_many :races, :through => :race_card
end
rails g model RaceCard race_card_date:date number_of_race:integer
rails g model Race race_card_id:integer race_nbr:integer
rails g model Wager race_nbr:integer race_card_id:integer wager_type:string payoff:integer
Так что, если я делаю это в консоли:
Wager.first.races #All races on the race card are returned. Good!
Но я хочу способ определения того, что гонки возвращаются, так что я добавить условие:
if I add this: :condition =>{:race_nbr => 1}
Wager.first.races #Return just race 1, but this is static (always set to 1)
Мой вопрос заключается в том, как я устанавливаю условие на race_nbr в модели Wager:
:condition => {:race_nbr => wager.race_nbr} #throws an error
:condition => {:race_nbr => self.race_nbr} #throws an error
Я пробовал много других вещей и просто не могу понять. Любые рекомендации будут оценены. Заранее спасибо.
Update: Я теперь попробовал решение, предложенное PinnyM ниже
:condition => "wagers.race_nbr = races.race_nbr" #unfortunately this yields the following:
SQL error or missing database (no such column wagers.race_nbr)
Я надеялся поставить условие внутри ассоциации. Будет что-то вроде этой работы:: condition => {wager_nbr => races.race_nbr} – Mutuelinvestor
Почти, см. Отредактированный ответ выше – PinnyM
Я думал, что у нас это было, но когда я попытался в консоли, я получил следующее: Wager Load (0.0ms) SELECT «ставки». * FROM «ставки» WHERE «ставки». «Id» = 1 LIMIT 1 Race Load (2.0ms) SELECT «race». * FROM «races» INNER JOIN «race_cards» ON «гонки». race_card_id "=" race_cards "." id "WHERE" race_cards "." id "= 1 AND (races.race_nbr = wagers.race_nbr) ActiveRecord :: JDBCError: [SQLITE_ERROR] Ошибка SQL или отсутствующая база данных (нет такого столбца: ставки .race_nbr). Похоже, мне почему-то нужно, чтобы Wager добавил к соединению. – Mutuelinvestor