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