2

我正在使用连接到我的 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} %>

目前下拉菜单显示“曼彻斯特国际机场”(例如),但我想包括来自同一模型的其他字段名称。

男人 | 曼彻斯特国际机场 | EGCC(期望结果)

MAN 和 EGCC 都是 Airport 模型中的两个列,分别命名为 iata 和 icao。


我将继续只保存 airport_id 但出于显示目的,下拉列表中的其他信息会很棒。

4

2 回答 2

3

您可以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} %>


请参阅此处 的文档。有问题的论点被称为:text_method.

于 2016-06-01T15:02:00.300 回答
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} %>
于 2016-06-01T15:03:49.653 回答