ruby-on-rails - rails - simple form hidden
Nombre de etiqueta personalizada de asociaciĆ³n de forma simple (2)
He estado luchando con lo que percibo como un problema simple:
Trabajando en Rails 3.0.8 con la gema simple_form 1.4.
Tengo dos modelos, propietarios y tipos de propietarios;
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
En mi formulario parcial de la vista de Propietario, quiero tener un cuadro de selección que muestre tanto el nombre como el subtipo_nombre de la asociación owner_type.
.... algo como esto: Tipo de propietario: [nombre | subtipo_nombre] ej. [Gobierno | Federal]; [Gobierno | Municipal]
Mi vista ahora contiene: 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 solo lista el campo owner_type.name por defecto. ¿Cómo se especifican diferentes campos, o en mi caso dos campos?
Toda la ayuda es apreciada; gracias por adelantado.
DJ
La forma más sencilla de hacerlo es implementar un método para etiquetar en su modelo. Me gusta esto:
class OwnerType < ActiveRecord::Base
def to_label
"#{name} | #{subtype_name}"
end
end
SimpleForm buscará de manera predeterminada para estos métodos en su modelo y lo usará como label_method, en este orden:
:to_label, :name, :title, :to_s
También puede cambiar esta opción en su inicializador simple_form.rb, o puede pasar un bloque o un método a :label_method
opción :label_method
de su entrada.
Tendrás que usar la opción: label_method para esto.
<%= f.association :owner_type, :include_blank => false, :label_method => lambda { |owner| "#{owner.name} | #{owner.subtype_name}" } %>
o, si define un método select_label en la clase del propietario, puede hacerlo
<%= f.association :owner_type, :include_blank => false, :label_method => :select_label %>