Collection_Select 在下拉列表中显示多个字段
Collection_Select display multiple fields in dropdown
我正在使用连接到我的 Airports 模型的 collection_select。
领取
belongs_to :departure_airport, :class_name => 'Airport', :foreign_key => 'd_airport_id'
belongs_to :arrival_airport, :class_name => 'Airport', :foreign_key => 'a_airport_id'
机场
has_many :claims
_form.html.erb
<%= collection_select :claim, :d_airport_id, Airport.order('name'), :id, :name, {:prompt => true} %>
当前下拉列表显示 "Manchester International Airport"(例如)但是我想包括来自同一模型的其他字段名称。
男人 |曼彻斯特国际机场 | EGCC(期望的结果)
MAN & EGCC 都是 Airport 模型中的列,恭敬地命名为 iata 和 icao。
我将继续只保存 airport_id,但是出于显示目的,下拉列表中的附加信息会很棒。
您可以使用要显示的格式化字符串向 Airport
模型添加一个方法。类似于:
def formatted_name
"#{iata} | #{name} | #{icao}"
end
然后将该方法传递给 collection_select
而不是 :name
。所以:
<%= collection_select :claim, :d_airport_id, Airport.order('name'), :id, :formatted_name, {:prompt => true} %>
请参阅文档 here。有问题的论点被称为 :text_method
.
以下应该对您有所帮助:rails 4 -- concatenate fields in collection_select
基本上,您在 Airport
模型中创建一个新方法(在 models/Airport.rb
中):
def collection_select_nice_data
"#{iata} | #{name} | #{icao}"
end
并且在 _form.html.erb
中使用新创建的 collection_select_nice_data
:
<%= collection_select :claim, :d_airport_id, Airport.order('name'), :id, :collection_select_nice_data, {:prompt => true} %>
我正在使用连接到我的 Airports 模型的 collection_select。
领取
belongs_to :departure_airport, :class_name => 'Airport', :foreign_key => 'd_airport_id'
belongs_to :arrival_airport, :class_name => 'Airport', :foreign_key => 'a_airport_id'
机场
has_many :claims
_form.html.erb
<%= collection_select :claim, :d_airport_id, Airport.order('name'), :id, :name, {:prompt => true} %>
当前下拉列表显示 "Manchester International Airport"(例如)但是我想包括来自同一模型的其他字段名称。
男人 |曼彻斯特国际机场 | EGCC(期望的结果)
MAN & EGCC 都是 Airport 模型中的列,恭敬地命名为 iata 和 icao。
我将继续只保存 airport_id,但是出于显示目的,下拉列表中的附加信息会很棒。
您可以使用要显示的格式化字符串向 Airport
模型添加一个方法。类似于:
def formatted_name
"#{iata} | #{name} | #{icao}"
end
然后将该方法传递给 collection_select
而不是 :name
。所以:
<%= collection_select :claim, :d_airport_id, Airport.order('name'), :id, :formatted_name, {:prompt => true} %>
请参阅文档 here。有问题的论点被称为 :text_method
.
以下应该对您有所帮助:rails 4 -- concatenate fields in collection_select
基本上,您在 Airport
模型中创建一个新方法(在 models/Airport.rb
中):
def collection_select_nice_data
"#{iata} | #{name} | #{icao}"
end
并且在 _form.html.erb
中使用新创建的 collection_select_nice_data
:
<%= collection_select :claim, :d_airport_id, Airport.order('name'), :id, :collection_select_nice_data, {:prompt => true} %>