Ruby on Rails-从has_and_belongs_to访问儿童关系

时间:2018-07-10 14:32:28

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

我对此有疑问,无法在Internet上的任何地方找到答案。

这是我遇到的错误:

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之间进行左联接。但老实说,我不确定如何访问它,在regionregion_translation之间建立了正确的关系(它在站点中的任何地方都有效),所以我被困在那里……有什么线索吗? / p>

1 个答案:

答案 0 :(得分:0)

以下是您可以明确设置的方法:

def Menu():
return("\n"
      + "Menu:\n-------------"
      + "\n1 - Does This"
      + "\n2 - Does That"
      + "\n3 - Quit"
      + "\n")


while True:
print(Menu())
option = int(input("Please choose an option: "))
if option == 1:
    print("\n Does This")
    continue
if option == 2:
    print("\n Does That ")
    continue
if option < 1 or option > 3:
    print("\nIncorrect input!")
    continue
if option == 3:
    print("\nBye!")
    break

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