Collection_Select在下拉列表中显示多个字段

时间:2016-06-01 14:57:02

标签: ruby-on-rails ruby grouped-collection-select

我正在使用连接到我的机场模型的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但是出于显示目的,下拉列表中的其他信息会很棒。

2 个答案:

答案 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} %>