Rails与相关的habtm

时间:2012-05-23 03:18:02

标签: ruby-on-rails ruby-on-rails-3

我的导轨设置如下:

class Person
  has_and_belongs_to_many :sports
  ...
end

class Checkin
  belongs_to :person
  ...
end

class Sport
  attr_accessible :name
  has_and_belongs_to_many :people
  ...
end

我希望在某一天获得人员的所有签到,但只有在他们拥有HABTM记录的情况下才能获得“棒球”的name。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

这样的事情有用吗? (可能需要更改属性名称)

Sport.where(:name => "Baseball").people.checkins

答案 1 :(得分:0)

您也可以拥有sport_id,而不仅仅是在checkins表中使用person_id。我认为这是你的要求,对吗?签到基本上是“人”为“体育”做的事情。

关系可能如下所示:

class Person
  has_and_belongs_to_many :sports
  ...
end

class Checkin
  belongs_to :person
  belongs_to :sport
  ...
end

class Sport
  attr_accessible :name
  has_and_belongs_to_many :people
  ...
end

现在,获得体育运动的签到将非常紧张。你可以这样做:

Checkin.where(sport_id:1,person_id:2)

如果您没有获得ID,您可以进行连接并在1次查询中获得结果。