simple_form_for simple rails form example collection check_box ruby-on-rails simple-form

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 %>