首页 > 解决方案 > Ruby on Rails - 从 has_and_belongs_to 访问子关系

问题描述

我遇到了这个问题,我在互联网上的任何地方都找不到答案。

这是我得到的错误:

PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "region_translations"
LINE 1: ...ions"."id" = "orders_regions"."region_id" WHERE ((region_tra...

所以我有类 Order,它有这个关系:

has_and_belongs_to_many :regions, :trough => :regions_orders

然后,我在 rails admin 部分有这个方法:

rails_admin do
    parent Booklet

    list do

      field :first_name
      field :last_name
      field :sent
      field :address
      field :state
      field :city
      field :postal_code

      field :booklets_orders
      field :regions
      field :language

      field :regions do
          searchable ({Region::Translation => :title})
          sortable({:region_translations => :title})
          filterable true
          queryable true
      end

然后,我看到该区域出现在可能的过滤器中,但如果我尝试请求,我会收到上面提到的错误。据我了解,这是因为它没有在表orders_regions.region_idregion_translation. 但老实说,我不确定如何访问它,关系在region和之间正确设置region_translation(它在网站的任何地方都有效),所以我被困在那里......有任何线索吗?

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

解决方案


以下是显式设置的方法:

class Order < ApplicationRecord
  has_many :regions_orders
  has_many :regions, through: :regions_orders
end

class RegionsOrder < ApplicationRecord
  belongs_to :order
  belongs_to :region
end

class Region < ApplicationRecord
  has_many :regions_orders
  has_many :orders, through: :regions_orders
end

region_orders 表是连接表,将包含 order_id 和 region_id 列,以及您希望放入其中的任何其他列。这些附加列应反映某个实体,该实体是该行的区域和顺序的组合。例如,您可能有一个名为数量的附加列,它表示该地区订单的销售单位数量。因此,对于 order_id、region_id 和数量,您的连接表的一行可能分别如下所示:22、12、1000。这意味着在区域 12 中售出了 1000 个单位(这是区域表中的区域 ID)用于订单22(这是订单表中订单的 ID)。我不知道您要建模什么,但我希望这会有所帮助。


推荐阅读