Имя метки, связанное с простой формой ассоциации - PullRequest
32 голосов
/ 13 июня 2011

Я боролся с простой проблемой:

Работа в Rails 3.0.8 с гемом simple_form 1.4.

У меня есть две модели, owner и 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 я хочу иметь поле выбора, которое отображает как имя, так и имя subtype_name ассоциации owner_type.
.... как то так: Тип владельца: [имя | имя_типа] напр. [Правительство | Федеральный]; [Правительство | Муниципальный]

Мое представление теперь содержит: 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. Как указать разные поля или в моем случае два поля?

Вся помощь приветствуется; заранее спасибо.

DJ

Ответы [ 2 ]

82 голосов
/ 13 июня 2011

Для этого вам нужно будет использовать параметр: 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 %>
50 голосов
/ 14 июня 2011

Самый простой способ сделать это - реализовать метод 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 опцию вашего ввода.

...