2016-05-25 16 views
1

我在表单中动态地填充选择标记。选择标记通过查询填充到Payee。我有一些字段想显示为元素的文本值。但是它必须有条件地完成。例如。Rails有条件的选择内容

领域:

: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_namelast_name

如果company是空白的,我想只显示first_namelast_name

目前如果companyfirst_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 

回答

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它会打印出所需的结果。

+0

简单。只有一行逻辑大声笑 – ctilley79

+0

得爱红宝石! –

+0

最后一个问题。这适用于NULL值,但不适用于空字符串。什么情况下会测试空字符串以及NULL?应该空字段为NULL? – ctilley79