Ruby on rails 3 自定义关联方法-可以这样做吗
我有三种型号:赌卡、赛马卡、赛马卡和赌卡。我已经在下注中创建了多个关联,并添加了一个自定义关联方法(在下注中)。该方法的目的是为每次下注筛选正确的比赛。(一些赌注跨越多场比赛)。我希望能够做一些事情,如:下注。第一。比赛。在下注,并有适当的比赛返回Ruby on rails 3 自定义关联方法-可以这样做吗,ruby-on-rails-3,activerecord,associations,Ruby On Rails 3,Activerecord,Associations,我有三种型号:赌卡、赛马卡、赛马卡和赌卡。我已经在下注中创建了多个关联,并添加了一个自定义关联方法(在下注中)。该方法的目的是为每次下注筛选正确的比赛。(一些赌注跨越多场比赛)。我希望能够做一些事情,如:下注。第一。比赛。在下注,并有适当的比赛返回 class Wager < ActiveRecord::Base belongs_to :wager_type belongs_to :race_card has_many :races, :through => :race_
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减去特定下注类型(称为腿)的比赛次数加1:
legs的值在WagerType模型中。注:下注属于WagerType,并且WagerType有许多下注。因此,a可以表示为:
a = (b - (select wager_types.legs where wagers_types.id = wagers.wager_type_id) + 1)
我的问题是:用我的赌注关联方法真的可以做到这一点吗。我已经在这个问题上绞尽脑汁好几个晚上了,不知道如何给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
class RaceCard:比赛\u卡
结束
更新:昨晚我在阅读Ruby中的设计模式,偶然发现了这个过程。我要看看是否可以在关联方法中使用它来计算a和b的值 你真的需要使用一个有很多关系的
?也许你可以在Wager类中创建一个方法
def races
b = self.race_nbr
a = b + self.race_card.legs
Races.find_by_race_card_id(self.id).where('race_nbr BETWEEN ? AND ?', a, b)
end
我不太了解您的模型,所以请求肯定是错误的,但您知道了…您可以使用self.proxy\u association.owner
获取关联方法内部的父对象。从那里你可以得到你想要的值
如果我正确理解了您的模型,那么代码应该是这样的
class Wager < ActiveRecord::Base
belongs_to :wager_type
belongs_to :race_card
has_many :races, :through => :race_card do
def in_wager
owner = self.proxy_association.owner
b = owner.race_nbr
a = b - owner.wager_type.legs + 1
where('races.race_nbr BETWEEN ? AND ?', a, b)
end
end
end
类赌注:比赛
下注
所有者=self.proxy\u association.owner
b=所有者。种族\u nbr
a=b-所有者.赌注类型.腿数+1
其中('races.race_nbr在?和?'之间),a,b)
结束
结束
结束
这是我从Rails api参考中获得的(参考proxy\u association
位于本节底部)。感谢您的输入。这是可行的,但它不符合我的应用要求。Azolo-谢谢!这就成功了。就在他晚上,我试着在协会中使用self。我只是不知道proxy_association.owner。今晚我一定会读更多关于它的文章。再次感谢。
def races
b = self.race_nbr
a = b + self.race_card.legs
Races.find_by_race_card_id(self.id).where('race_nbr BETWEEN ? AND ?', a, b)
end
class Wager < ActiveRecord::Base
belongs_to :wager_type
belongs_to :race_card
has_many :races, :through => :race_card do
def in_wager
owner = self.proxy_association.owner
b = owner.race_nbr
a = b - owner.wager_type.legs + 1
where('races.race_nbr BETWEEN ? AND ?', a, b)
end
end
end