J'ai du mal avec ce que je perçois comme un problème simple:
Travailler dans Rails 3.0.8 avec le gem simple_form 1.4.
J'ai deux modèles, les propriétaires et les types de propriétaire;
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
Dans la partie partielle _form de la vue Propriétaire, je souhaite avoir une zone de sélection qui affiche à la fois le nom et le sous-type_nom de l'association propriétaire_type.
.... quelque chose comme ceci: Type de propriétaire: [nom | nom_sous-type], par exemple. [Gouvernement | Fédéral]; [Gouvernement | Municipal]
Ma vue contient maintenant: app/vues/propriétaires/_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 %>
... la f.association ne répertorie que le champ owner_type.name par défaut. Comment spécifiez-vous différents champs, ou dans mon cas deux champs?
Toute aide est appréciée; Merci d'avance.
DJ
Vous devrez utiliser l'option: label_method pour cela.
<%= f.association :owner_type, :include_blank => false, :label_method => lambda { |owner| "#{owner.name} | #{owner.subtype_name}" } %>
ou, si vous définissez une méthode select_label sur la classe du propriétaire, vous pouvez faire
<%= f.association :owner_type, :include_blank => false, :label_method => :select_label %>
La façon la plus simple de le faire est d'implémenter une méthode to_label sur votre modèle. Comme ça:
class OwnerType < ActiveRecord::Base
def to_label
"#{name} | #{subtype_name}"
end
end
Par défaut, SimpleForm recherchera ces méthodes sur votre modèle et l'utilisera comme label_method, dans cet ordre:
:to_label, :name, :title, :to_s
Vous pouvez également modifier cette option sur votre initialiseur simple_form.rb, ou vous pouvez passer un bloc ou une méthode à :label_method
option de votre saisie.