0

我使用带有多态关联的grouped_collection_selectcompanyperson分配给任务。问题是人们有名字和姓氏,而公司只有一个名字。我想在菜单中使用:fnamelname的拼接作为option_key_method,我想在菜单中使用:name作为option_key_method作为公司组。grouped_collection_select with different option_key_methods

但是我在Google调查中没有遇到过这个问题。既然这样,我用:email作为option_key_method,因为它是一个的由两个模型共享的最显着的领域:

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

我会如何设置它利用两种不同的名称字段的那是由两种不同的模式实现的?

回答

1

你可以传递一个lambda方法的option_key_method,这需要对象目前在手PersonGroup你的情况,你可以做你想做就可以了

例的处理:

<%= 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方法抛出一个语法错误(它不喜欢这两种名称类型之间的冒号),我使用下面的命令:'lambda {| company_or_person_object | company_or_person_object.instance_of?公司?营救company_or_person_object.fname +“”+ company_or_person_object.lname rescue company_or_person_object.name}' – neanderslob

+1

是否可以自定义collection或group_method?例如,而不是:我想要使用.where(account_id:id),而是:model_name我想使用model_name.gsub – Moh