0

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

Я, однако, не сталкивался с этим в своем расследовании 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} %> 
+0

Большой решение. Метод лямбда запустил синтаксическую ошибку (ей не понравился двоеточие между двумя типами имен), который я использовал, используя следующее: 'lambda {| company_or_person_object | company_or_person_object.instance_of? Компания? rescue company_or_person_object.fname + "" + company_or_person_object.lname rescue company_or_person_object.name} ' – neanderslob

+1

можно ли настроить коллекцию или group_method? например, вместо этого: все, что я хочу использовать .where (account_id: id) и вместо этого: model_name Я хочу использовать model_name.gsub – Moh

Смежные вопросы