Ruby on rails 尝试在Rails中使用表单将id映射到名称

Ruby on rails 尝试在Rails中使用表单将id映射到名称,ruby-on-rails,ransack,Ruby On Rails,Ransack,我正在我的应用程序中使用搜索宝石搜索功能。在我的表单中,我似乎所有的东西都在工作,但是我只能让表单显示a)id或b)对象本身。我似乎无法将它正确地映射到数据的名称,而不是它的id 有什么想法吗 表格编号: <!-- office type --> <%= f.collection_select :office_type_id_gteq, Desk.all, :id, :office_type_id, include_blank: "Office type", class: "f

我正在我的应用程序中使用搜索宝石搜索功能。在我的表单中,我似乎所有的东西都在工作,但是我只能让表单显示a)id或b)对象本身。我似乎无法将它正确地映射到数据的名称,而不是它的id

有什么想法吗

表格编号:

<!-- office type -->
<%= f.collection_select :office_type_id_gteq, Desk.all, :id, :office_type_id, include_blank: "Office type", class: "form-control" %>
因此,就目前情况而言,我可以在表格的下拉列表中看到我的收藏中显示的office_type_id。我可以将其更改为office\u类型,但这会引入对象本身,而不是名为office\u类型的字符串值

正在尝试将office类型id映射到office类型字符串,但似乎无法正常工作。我知道这张桌子。所有这些都可以添加到控制器的一个变量中。为了方便,我直接把它做成表格,看看是否可以开始工作

再次感谢

这将告诉您如何使用collection_select。但首先,我认为你构建的模型是错误的。如果一个办公室类型有许多桌子,那么它就不能有桌子ID,因为这将把它链接到一个桌子上。您需要删除此列,因为关系是通过办公桌的office type ID建立的

如果我理解正确,那么您想要的是:

<%= f.collection_select :office_type_id, OfficeType.all, :id, :office_type, include_blank: false, class: "form-control" %>


这将为属性“office\u type\u id”创建一个下拉菜单,将所有的office类型作为选项,在选中时发送它们的id,并使用它们的office type属性来决定在下拉菜单上显示什么。

Hi@Mark,非常感谢您清除了这一点。因为我的模型用下划线命名,所以我正在尝试打电话给办公室类型。所有,并得到一个错误。不敢相信我没有注意到这一点。在关系方面,嗯,他们总是让我困惑。我想这里发生的事情是,我从另一种方式开始与关系,然后将其向下修正。现在不删除ID列,它确实起作用,但我会更仔细地研究这一点事情。再次感谢您的建议和快速响应。传奇!容易犯错误,乐于帮助:)
  create_table "desks", force: :cascade do |t|
    t.string   "listing_name"
    t.integer  "min_days"
    t.integer  "max_days"
    t.text     "description"
    t.string   "location"
    t.integer  "accommodate"
    t.integer  "user_id"
    t.datetime "created_at",                          null: false
    t.datetime "updated_at",                          null: false
    t.integer  "daily_rate"
    t.integer  "office_type_id"
    t.integer  "desk_type_id"
    t.string   "amenity_ids",    default: "--- []\n"
    t.float    "latitude"
    t.float    "longitude"
    t.boolean  "active"
  end


  create_table "office_types", force: :cascade do |t|
    t.string   "office_type"
    t.integer  "desk_id"
    t.datetime "created_at",  null: false
    t.datetime "updated_at",  null: false
  end
<%= f.collection_select :office_type_id, OfficeType.all, :id, :office_type, include_blank: false, class: "form-control" %>