2016-05-25 17 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