ruby-on-rails - 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_id
和region_translation
. 但老实说,我不确定如何访问它,关系在region
和之间正确设置region_translation
(它在网站的任何地方都有效),所以我被困在那里......有任何线索吗?
解决方案
以下是显式设置的方法:
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)。我不知道您要建模什么,但我希望这会有所帮助。
推荐阅读
- discord - 使用服务器 webhook url 连接到不和谐服务器?
- amazon-web-services - 模板错误:每个默认成员都必须是字符串 Coludformation yml
- kubernetes - eksctl create failed 一个子网没有足够的容量来支持集群
- java - 需要帮助理解,java:
预期在下面的代码中 - python - Discord Bot - 如何删除倒数第二条最近的消息?
- reactjs - 是否可以从 graphQL 中的突变完成回调中检索有效负载?
- c++ - 错误:'operator=' 不匹配(操作数类型为 'const XXX' 和 'std::remove_reference
::type' {aka 'const XXX'}) - ios - SwiftUI:导航返回时如何平滑过渡bottomBar工具栏?
- npm - Npm 包没有更新
- django - 如何从 Django 中的 OneToOneField 填充模型的新字段?