如何连接两个在 rails 中没有关系的 table

how to connect two table that has no relation in rails

我有一个table叫食物和类别,但是这个table没有关系,我想通过另一个叫food_category的table连接它们。我想在食物和类别之间建立一对一的关系,也许图表看起来像这样

class Food < ApplicationRecord 
  has_one :category
end

class Category < ApplicationRecord
  has_one :food
end

class FoodCategory < ApplicationRecord
  belongs_to :category
  belongs_to :food
end

可以这样做吗?

是的,这是可能的。你只需要做

has_one :category, through: :food_categories

Rails docs here 中所述。

但是,这是处理这种关联的 long-winded 方式。如果它将成为 one-to-one,为什么不直接将外键添加到 Food 的 Category 中呢?据推测,您实际上希望类别包含许多 食物记录?似乎以下内容更有意义:

class Food < ApplicationRecord 
  belongs_to :category
end

class Category < ApplicationRecord
  has_many :food
end
class Food < ApplicationRecord 
  has_one :food_category
  has_one :category, through: :food_categories
end

在rails控制台中,您可以这样访问

Food.find(:id).categories