grouped_collection_select с разными option_key_methods

Я использую grouped_collection_select с полиморфными ассоциациями назначить либо company или же person к задаче. Проблема в том, что у людей есть имя и фамилия, а у компании просто есть имя. Я хотел бы использовать объединение :fname а также lname как option_key_method для группы людей в меню, и я хотел бы использовать :name как option_key_method для группы компаний в меню.

Я, однако, не сталкивался с этим в моем расследовании Google. В настоящее время я использую :email как option_key_method потому что это самое отличительное поле, которое разделяют две модели:

<%= f.grouped_collection_select :entity_id, [Company, Person], :all, :model_name, :to_global_id, :email %>

Как я могу настроить его так, чтобы использовать два разных типа полей имен, которые реализуются двумя разными моделями?

1 ответ

Решение

Вы можете передать лямбда-метод option_key_method, который берет объект в настоящее время в руках Person или же Group в вашем случае, и вы можете сделать обработку, которую вы хотите на нем

Пример:

<%= f.grouped_collection_select :entity_id, [Company, Person], :all, :model_name, :to_global_id, lambda {|company_or_person_object| company_or_person_object.instance_of? Company ? company_or_person_object.fname + company_or_person_object.lname : company_or_person_object.name} %>