Простое имя ассоциации меток
Я боролся с тем, что я считаю простой проблемой:
Работает в Rails 3.0.8 с помощью простого образа 1.4.
У меня две модели, владельцы и 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], например. [Правительство | Федеральный]; [Правительство | Муниципальный]
В моем представлении теперь есть: app/views/owner/_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
Ответы
Ответ 1
Для этого вам нужно использовать опцию: 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 %>
Ответ 2
Самый простой способ сделать это - реализовать метод 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
вариант вашего ввода.