2016-05-25 16 views
1

私は自分のフォーム内に選択タグを動的に設定しています。 selectタグは、Payeeへのクエリによって取り込まれます。私は要素のテキスト値として表示したいいくつかのフィールドを持っています。ただし条件付きで行う必要があります。例えば。Rails条件付き選択内容

フィールド:

:company 
:first_name 
:last_name 

私はそうのようなテキストボックスにこれらの3つを連結することができます

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が空白の場合、私はcompanyfirst_nameが、それは私が望んでいない2つを、連結存在​​する場合、現在のみfirst_namelast_name

を表示したいと思います。

私はそれぞれのケースごとにデータベースを個別に照会する方法を知っていますが、結果を組み合わせて選択タグが正しく表示されるようにする方法はわかりません。

ここまで私の助けを借りています。私はそれが現在混乱していることを知っていますが、私はこれを行う方法を理解するのに役立つ必要があります。さて、あなたは、単にpayee.display_nameを呼び出すことができ、それは望ましい結果を出力します

# 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 

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モデル内のメソッドを作成する必要があります。

+0

簡単。論理の1行だけで笑 – ctilley79

+0

ルビーが大好き! –

+0

最後の質問が1つあります。これは空の文字列ではなくNULL値で機能します。空文字列とNULLをテストする条件は何ですか?空のフィールドはNULLにする必要がありますか? – ctilley79