我正在使用连接到我的机场模型的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} %>
目前,下拉列表显示“曼彻斯特国际机场”(例如),但我想在同一型号中包含其他字段名称。
MAN |曼彻斯特国际机场| EGCC(期望结果)
MAN&amp; EGCC在机场模型中都是名为iata&amp; amp; icao恭敬地。
我将继续只保存airport_id但是出于显示目的,下拉列表中的其他信息会很棒。
答案 0 :(得分:1)
您可以使用要显示的格式化字符串向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
。
答案 1 :(得分:0)
以下内容可以为您提供帮助: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} %>