web-dev-qa-db-ja.com

単純なフォームの関連付けのカスタムラベル名

私は簡単な問題であると私が思うことに苦労しています。

Rails 3.0.8でsimple_form 1.4 gemを使用して作業しています。

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

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

36
dj_44

これには: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 %>
84
Dogbert

これを行う最も簡単な方法は、モデルにメソッド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オプションにブロックまたはメソッドを渡すこともできます。

50
rafaelfranca