【发布时间】:2022-06-19 12:05:59
【问题描述】:
我正在构建一个表单,用户可以在其中创建金融交易。一个字段是银行帐户的下拉列表。
我希望此下拉列表按每个帐户的帐户类型(BankAccount::ACCOUNT_TYPE - 每个 BankAccount 记录中的属性)对所有列出的银行帐户进行分组。
如果我现在手动编写所有代码,代码将如下所示:
<%= f.select :bank_account_id,
{
'On-Budget' => ['Cash',
'Credit Card 1',
'Credit Card 2',
'Venmo'],
'Off-Budget' => ['Investment Bank 1',
'Investment Bank 1'],
'Closed' => ['Old Bank 1',
'Old Bank 2'],
} %>
app/models/bank_account.rb - 我在其中定义 ACCOUNT_TYPES
class BankAccount < ApplicationRecord
ACCOUNT_TYPES = %w(On-Budget Off-Budget Closed).freeze
...
end
这是我的工作 collection.select,没有分组
<%= f.collection_select :bank_account_id,
BankAccount.all,
:id,
:name,
{prompt: 'Select an account'} %>
从 rails API,我认为 grouped_collection_select 是我需要的 (https://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-grouped_collection_select)
grouped_collection_select(method, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {})
使用BankAccount::ACCOUNT_TYPES 作为我的 group_method,而 group_label_method 不起作用。
<%= f.grouped_collection_select(:bank_account_id,
BankAccount.all,
BankAccount::ACCOUNT_TYPES, (group_method?)
BankAccount::ACCOUNT_TYPEs, (group_label_method?)
:id,
:name,
{prompt: 'Select an account' } %>
【问题讨论】:
-
请参阅此要点gist.github.com/tessi/5505930 以获取有关
grouped_collection_select的更多信息
标签: ruby-on-rails forms drop-down-menu