У меня есть три модели: Wager, Race, RaceCard и WagerType.Я создал ассоциацию has_many в Wagers и добавил собственный метод ассоциации (in_wager).Целью метода является фильтрация правильных рас для каждой ставки.(Некоторые ставки охватывают несколько рас).Я хотел бы иметь возможность сделать что-то вроде: Wager.first.races.in_wager и вернуть соответствующие расы.
class Wager < ActiveRecord::Base
belongs_to :wager_type
belongs_to :race_card
has_many :races, :through => :race_card do
def in_wager
where('races.race_nbr BETWEEN ? AND ?', a, b)
end
end
end
Мой пользовательский метод работает нормально, если я жестко закодировал значения для a и b, однако мне нужно, чтобы эти значения были динамическими.В частности, значение b должно равняться атрибуту race_nbr из модели Wager:
b = wagers.race_nbr
, а значение a должно равняться b за вычетом количества гонок для конкретного типа ставок (известных как ноги) плюс 1:
a = b - Legs + 1
Значение для ног находится в модели WagerType.Примечание. Вейджеры принадлежат WagerType и WagerType has_many.Следовательно, a можно выразить как:
a = (b - (select wager_types.legs where wagers_types.id = wagers.wager_type_id) + 1)
МОЙ Вопрос: действительно ли это возможно сделать с помощью моего метода ассоциации in_wager.Я уже несколько вечера бьюсь об этом и не могу понять, как правильно назначить значения a и b.Также, если вы чувствуете, что я ошибаюсь, я был бы рад услышать альтернативные подходы.Спасибо за вашу помощь.
Примечание: я никогда не упоминал модели RaceCard или Races.У них есть следующие ассоциации:
class RaceCard < ActiveRecord::Base
has_many :races
end
class Races < ActiveRecord::Base
belongs_to :race_card
has_many :wagers, :through => :race_card
end
Обновление: вчера вечером я читал шаблоны проектирования в Ruby и наткнулся на Proc.Я собираюсь посмотреть, смогу ли я использовать его в методе Association для вычисления значений a и b.