Ruby on Rails - 如何使用 simple_form grouped_select 获得自定义输出?
Ruby on Rails - How to get custom output with simple_form grouped_select?
我正在使用 simple_form grouped_select
但我没有得到我想要的输出。
型号
class PartnerName < ApplicationRecord
has_many :urls, dependent: :destroy
end
#<PartnerName id: 1, name: "technology", app_name: "test">
#<PartnerName id: 2, name: "technology", app_name: "user">
class Url < ApplicationRecord
belongs_to :network_partner_name
end
#<Url id: 1, partner_name_id: 1, name: "abc.org">
#<Url id: 2, partner_name_id: 1, name: "qwe.org">
#<Url id: 3, partner_name_id: 2, name: "123.org">
#<Url id: 4, partner_name_id: 2, name: "345.org">
查看文件
= simple_form_for(:query, method: :post) do |f|
= f.error_notification
.form-row
.col-auto
= f.input :network_partner_name_id, collection: PartnerName.order(:name),
include_blank: false
.form-row
.col-auto
= f.input :url_id, collection: PartnerName.order(:name).includes(:urls),
as: :grouped_select,
group_method: :urls,
include_blank: false
输出
我越来越喜欢上面形式的下面的输出。
对于 PartnerName
<option value="1">technology</option>
<option value="2">technology</option>
对于Url
<optgroup label="technology">
<option value="1">abc.org</option>
<option value="2">qwe.org</option>
</optgroup>
<optgroup label="technology">
<option value="3">123.org</option>
<option value="4">456.org</option>
</optgroup>
但我想获得如下所示的输出,其中包含 ParnerName 的名称和 ParnerName 的 app_name 属性。我该怎么做?
对于 PartnerName
<option value="1">technology - test</option>
<option value="2">technology - user</option>
对于Url
<optgroup label="technology - test">
<option value="1">abc.org</option>
<option value="2">qwe.org</option>
</optgroup>
<optgroup label="technology - user">
<option value="3">123.org</option>
<option value="4">456.org</option>
</optgroup>
谢谢。
您可以为 PartnerName
添加 class 方法
class PartnerName < ApplicationRecord
has_many :urls, dependent: :destroy
def label_collection
"#{name} - #{app_name}"
end
end
并将其与 label_method
和 group_label_method
simple_form 助手一起使用:
= simple_form_for(:query, method: :post) do |f|
= f.error_notification
.form-row
.col-auto
= f.input : network_partner_name_id, collection: PartnerName.order(:name),
label_method: :label_collection,
include_blank: false
.form-row
.col-auto
= f.input :url_id, collection: PartnerName.order(:name).includes(:urls),
as: :grouped_select,
group_method: :urls,
group_label_method: :label_collection,
include_blank: false
我正在使用 simple_form grouped_select
但我没有得到我想要的输出。
型号
class PartnerName < ApplicationRecord
has_many :urls, dependent: :destroy
end
#<PartnerName id: 1, name: "technology", app_name: "test">
#<PartnerName id: 2, name: "technology", app_name: "user">
class Url < ApplicationRecord
belongs_to :network_partner_name
end
#<Url id: 1, partner_name_id: 1, name: "abc.org">
#<Url id: 2, partner_name_id: 1, name: "qwe.org">
#<Url id: 3, partner_name_id: 2, name: "123.org">
#<Url id: 4, partner_name_id: 2, name: "345.org">
查看文件
= simple_form_for(:query, method: :post) do |f|
= f.error_notification
.form-row
.col-auto
= f.input :network_partner_name_id, collection: PartnerName.order(:name),
include_blank: false
.form-row
.col-auto
= f.input :url_id, collection: PartnerName.order(:name).includes(:urls),
as: :grouped_select,
group_method: :urls,
include_blank: false
输出
我越来越喜欢上面形式的下面的输出。
对于 PartnerName
<option value="1">technology</option>
<option value="2">technology</option>
对于Url
<optgroup label="technology">
<option value="1">abc.org</option>
<option value="2">qwe.org</option>
</optgroup>
<optgroup label="technology">
<option value="3">123.org</option>
<option value="4">456.org</option>
</optgroup>
但我想获得如下所示的输出,其中包含 ParnerName 的名称和 ParnerName 的 app_name 属性。我该怎么做?
对于 PartnerName
<option value="1">technology - test</option>
<option value="2">technology - user</option>
对于Url
<optgroup label="technology - test">
<option value="1">abc.org</option>
<option value="2">qwe.org</option>
</optgroup>
<optgroup label="technology - user">
<option value="3">123.org</option>
<option value="4">456.org</option>
</optgroup>
谢谢。
您可以为 PartnerName
class PartnerName < ApplicationRecord
has_many :urls, dependent: :destroy
def label_collection
"#{name} - #{app_name}"
end
end
并将其与 label_method
和 group_label_method
simple_form 助手一起使用:
= simple_form_for(:query, method: :post) do |f|
= f.error_notification
.form-row
.col-auto
= f.input : network_partner_name_id, collection: PartnerName.order(:name),
label_method: :label_collection,
include_blank: false
.form-row
.col-auto
= f.input :url_id, collection: PartnerName.order(:name).includes(:urls),
as: :grouped_select,
group_method: :urls,
group_label_method: :label_collection,
include_blank: false