has_and_belongs_to_many - 从连接表中获取数据

时间:2014-06-10 14:37:47

标签: ruby-on-rails ruby-on-rails-4

我的rails应用程序使用三个表:A,B,C。表与表C到表B相关。关系是多对多的。表B还包含一些额外的字段,如rel_date等。表之间的关系工作正常,但我不知道如何获取B表额外的字段数据。因为如果我制作A.Cs,我只得到与之相关的C表元素表A.不知道如何获取表B中的所有字段?

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

Rails具有has_many ... through关联类型,可以完成您之后的操作:

class Restaurant < ActiveRecord::Base
  has_many :restaurant_dishes
  has_many :dishes, through: restaurant_dishes
end

class RestaurantDish < ActiveRecord::Base
 belongs_to :restaurant
 belongs_to :dish

 # Other attributes, e.g. price
end

class Dish < ActiveRecord::Base
  has_many :restaurant_dishes
  has_many :restaurants, through: restaurant_dishes
end

这允许您执行@restaurant.restaurant_dishes.where(dish: @dish)之类的操作来访问中间表,但如果您对中间表不感兴趣,仍然可以使用快捷方式@restaurant.dishes

有关详细信息,请参阅http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

答案 1 :(得分:2)

您想使用has_many through

class ModelA < ActiveRecord::Base
  has_many :model_b
  has_many :model_c, through: :model_b
end

class ModelB < ActiveRecord::Base
  has_many :model_a
  has_many :model_b
end

class ModelC < ActiveRecord::Base
  has_many :model_b
  has_many :model_a, through: :model_b
end

现在您可以像以前一样从C访问A,反之亦然,但也可以从两者访问B