尝试使用 Rails 中的表单将 id 映射到名称

Trying to map id to a name using form in Rails

我正在使用搜索 gem Ransack 在我的应用程序中进行搜索。在我的表格中,我似乎可以正常工作,但是我只能让表格显示 a) id 或 b) object 本身。我似乎无法将其正确映射到数据名称而不是它的 ID。

有什么想法吗?

表单代码:

<!-- office type -->
<%= f.collection_select :office_type_id_gteq, Desk.all, :id, :office_type_id, include_blank: "Office type", class: "form-control" %>

模型和模式:

class OfficeType < ActiveRecord::Base
    has_many :desks

end

class Desk < ActiveRecord::Base

    belongs_to :office_type

end

架构

  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

因此,就目前而言,我可以在表单下拉列表的 collection 中看到 office_type_id 显示。我可以将其更改为 office_type,但这会引入 object 本身,而不是名为 office_type 的字符串值。

试图将 office_type_id 映射到 office_type 字符串,但似乎无法正常工作。我知道 Desk.all 可以添加到控制器中的变量中,它很容易突出,我直接将它放在表格中以查看是否可以开始工作。

再次感谢。

https://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select

这告诉你如何使用collection_select。但首先我认为你在错误地构建你的模型。如果一个办公室类型有很多张桌子,那么它就不能有一张桌子 ID,因为这将 link 它只有一张桌子。您需要删除此列,因为关系来自办公桌的办公室类型 ID

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

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

这将为属性 'office_type_id' 创建一个下拉菜单,将所有办公室类型作为选项,在选择时发送它们的 ID,并使用它们的办公室类型属性来决定在下拉菜单中显示的内容.