【问题标题】:Collection_Select display multiple fields in dropdownCollection_Select 在下拉列表中显示多个字段
【发布时间】:2016-06-01 14:57:02
【问题描述】:

我正在使用连接到我的 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,但出于显示目的,下拉菜单中的其他信息会很棒。

【问题讨论】:

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


    【解决方案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

    【讨论】:

      【解决方案2】:

      以下内容应该对您有所帮助: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} %>
      

      【讨论】:

      • 也感谢您的回答和链接。两个答案似乎完全相同,所以我选择了第一个提供的答案作为接受的答案。再次感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      相关资源
      最近更新 更多