I have been struggling with what I perceive to be a simple problem:
Working in Rails 3.0.8 with the simple_form 1.4 gem.
I have two models, owners and 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
In my the _form partial of the Owner view, I want to have a select box that displays both the name and subtype_name of the owner_type association.
....something like this: Owner Type: [name | subtype_name] eg. [Government | Federal]; [Government | Municipal]
My view now contains: 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 %>
...the f.association only list the owner_type.name field by default. How do you specify different fields, or in my case two fields?
All help is appreciated; thanks in advance.
DJ
You'll have to use the :label_method option for this.
<%= f.association :owner_type, :include_blank => false, :label_method => lambda { |owner| "#{owner.name} | #{owner.subtype_name}" } %>
or, if you define a select_label method on the owner's class, you can do
<%= f.association :owner_type, :include_blank => false, :label_method => :select_label %>
The easiest way to do this is implement an method to_label on your Model. Like this:
class OwnerType < ActiveRecord::Base
def to_label
"#{name} | #{subtype_name}"
end
end
SimpleForm by default will search fot this methods on your model and use it as label_method, in this order:
:to_label, :name, :title, :to_s
You can also change this option on your simple_form.rb initializer, or you can pass a block or a method to :label_method
option of your input.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With