我在表单中动态填充选择标记。 select标记由Payee
的查询填充。我有几个字段,我想显示为元素的文本值。但是必须有条件地完成。例如。
字段:
:company
:first_name
:last_name
我可以在文本框中连接这三个,如下所示:
f.select :payee_id, Payee.all.collect { |p| [p.company.to_s + " " + p.first_name.to_s + " " + p.last_name.to_s, p.id] }
以上不符合我的要求。如果company
存在,我想省略first_name
和last_name
。
如果company
为空,我只想显示first_name
和last_name
目前如果存在company
和first_name
,它会将两者连接在一起,这是我不想要的。
我知道如何分别查询每个案例的数据库,但我不知道如何组合结果,因此select标签将正确显示。
到目前为止,这是我的助手。我知道它现在很乱,但我需要帮助理解这个方法才能完成。
def expense_payee_id_field(f)
@payee_with_company = Payee.where("company IS NOT NULL and company !='' ")
@payee_without_company = Payee.where("(first_name != '' or last_name != '') and company = '' ")
f.select :payee_id, Payee.all.collect { |p| [p.company.to_s + " " + p.first_name.to_s + " " + p.last_name.to_s, p.id] }
end
答案 0 :(得分:2)
您应该在Payee
模型中创建一个为您执行此逻辑的方法:
# Payee.rb
# I've extracted this into its own method
# because you very well may need it later
def full_name
[first_name, last_name].join(" ")
end
# This can be written more concisely, but I've
# kept it as-is to allow for better readability
def display_name
if company_name.blank?
full_name
else
company_name
end
end
现在,您只需拨打payee.display_name
即可打印所需的结果。