尝试使用 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,并使用它们的办公室类型属性来决定在下拉菜单中显示的内容.
我正在使用搜索 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,并使用它们的办公室类型属性来决定在下拉菜单中显示的内容.