Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 如何通过关联将动态条件应用到Rails 3中_Ruby On Rails 3_Associations - Fatal编程技术网

Ruby on rails 3 如何通过关联将动态条件应用到Rails 3中

Ruby on rails 3 如何通过关联将动态条件应用到Rails 3中,ruby-on-rails-3,associations,Ruby On Rails 3,Associations,我有三种型号:赛马卡、赛马和赌博 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 :ra

我有三种型号:赛马卡、赛马和赌博

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
但是我想要一种确定返回哪些比赛的方法,所以我添加了一个条件:

if I add this:   :condition =>{:race_nbr => 1}

Wager.first.races  #Return just race 1, but this is static (always set to 1)
我的问题是如何在下注模式中设置比赛条件:

:condition => {:race_nbr => wager.race_nbr}  #throws an error
:condition => {:race_nbr => self.race_nbr}   #throws an error
我试过很多其他的方法,但似乎都没能成功。任何指导都将不胜感激。提前谢谢

更新:我现在已经尝试了下面PinnyM建议的解决方案

:condition => "wagers.race_nbr = races.race_nbr" #unfortunately this yields the following:

SQL error or missing database (no such column wagers.race_nbr)

可以使用作用域执行此操作:

def Race < ActiveRecord::Base
  scope :for_race_nbr, lambda { |race_nbr| where(:race_nbr => race_nbr) }
end

def Wager < ActiveRecord::Base
  def races_for_race_nbr
    races.for_race_nbr(race_nbr)
  end
end
def Race种族| nbr)}
结束
def下注
我希望将条件放入关联中。我想我们已经做到了,但当我在控制台中尝试时,我得到了以下结果:下注量(0.0ms)选择“下注”。*从“下注”的“下注”中选择“下注”。“id”=1个限制1个比赛负载(2.0ms)选择“比赛”。*从“比赛”中选择“比赛”。“比赛卡”=比赛卡。“id”中的“race\u cards”。“id”=1和(races.race\u nbr=wagers.race\u nbr)ActiveRecord::JDBCError:[SQLITE\u ERROR]SQL错误或缺少数据库(没有这样的列:wagers.race\u nbr)。看起来我需要将赌注添加到加入中。你是对的,我错误地认为加入是在一个步骤中完成的。不幸的是,外部加入不允许在像:has\u many这样的关联上进行。我认为你必须使用作用域,请参阅答案(再次编辑)。信不信由你,此方法产生的错误与早期方法完全相同。此处的连接也分为多个步骤。首先,它查询下注并获取第一条记录,然后它对比赛和比赛卡进行内部连接,但无法解析where子句中的wager.race_nbr引用。有趣的是,不应该有r参考wagers.race\u nbr,因为代码不包含任何内容。是否确实已删除:conditions修饰符并重新启动控制台环境?
def Race < ActiveRecord::Base
  scope :for_race_nbr, lambda { |race_nbr| where(:race_nbr => race_nbr) }
end

def Wager < ActiveRecord::Base
  def races_for_race_nbr
    races.for_race_nbr(race_nbr)
  end
end