39

私は単純な問題であると私が感じるものに苦労してきました:

simple_form1.4gemを使用したRails3.0.8での作業。

私にはownersとowner_typesの2つのモデルがあります。

class Owner < ActiveRecord::Base
  belongs_to :own_type
  attr_accessible :name, :own_type_id
end

class OwnerType < ActiveRecord::Base
  has_many :owners
  attr_accessible :name, :subtype_name
end

所有者ビューの_form部分に、owner_typeアソシエーションの名前とsubtype_nameの両方を表示する選択ボックスが必要です。
....このようなもの:所有者タイプ:[名前| subtype_name]例:[政府| 連邦政府]; [政府| 市営]

私のビューには次のものが含まれています:app / views / owners / _form.html.erb

<%= simple_form_for @owner do |f| %>
  <%= f.error_messages %>
  <%= f.input :name %>
  <%= f.association :owner_type, :include_blank => false %>
  <%= f.button :submit %>
<% end %>

... f.associationは、デフォルトでowner_type.nameフィールドのみをリストします。異なるフィールド、または私の場合は2つのフィールドをどのように指定しますか?

すべての助けに感謝します。前もって感謝します。

DJ

4

2 に答える 2

91

これには:label_methodオプションを使用する必要があります。

<%= f.association :owner_type, :include_blank => false, :label_method => lambda { |owner| "#{owner.name} | #{owner.subtype_name}" } %>

または、所有者のクラスでselect_labelメソッドを定義する場合は、次のことができます。

<%= f.association :owner_type, :include_blank => false, :label_method => :select_label %>
于 2011-06-13T18:33:14.017 に答える
53

これを行う最も簡単な方法は、モデルにメソッドto_labelを実装することです。このような:

class OwnerType < ActiveRecord::Base
  def to_label
    "#{name} | #{subtype_name}"
  end
end

SimpleFormはデフォルトで、モデル上のこのメソッドを検索し、次の順序でlabel_methodとして使用します。

:to_label, :name, :title, :to_s

simple_form.rb初期化子でこのオプションを変更することも、入力のオプションにブロックまたはメソッドを渡すこともでき:label_methodます。

于 2011-06-13T20:04:20.807 に答える