2010-11-23 11 views
1
unless @client.nil? 
    TestMailer.snap_shot_error("test1","Errors", 
     {:file_name => File.basename(upload_file),:client_name => @client.client_name}) 
else 
    TestMailer.snap_shot_error("test1","Errors", 
     {:file_name => File.basename(upload_file)) 
end 

def snap_shot_error(to_address,subject,options={}) 
    # code 
end 

<% if @client_name %> 
    <%= _("There were problems with file ") + @file_name + _(" for client ") + @client_name %> 
<% else %> 
    <%= _("There were problems with file ") + @file_name %> 
<% end %> 

答えて

3

これらのクエストインの両方で、3項演算子を使用できます。

condition ? value_if_true : value_if_false 

これは式(別の値を生成する値と演算子のシーケンス)です。条件が真であるか偽であるかを判定し、条件が真である場合は最初の値(?の後と:)の前に評価され、条件が偽である場合は、次の値(=

だから、あなたが投稿最初のコード例のために、あなたがこれを行うことができます:

TestMailer.snap_shot_error("test1", "Errors", 
    :file_name => File.basename(upload_file), 
    :client_name => @client ? @client.client_name : nil) 

を[私はオプションの周りの中括弧を削除したことに注意してください - Rubyで最終的に必要がありませんオプションには、ハッシュ、]

それとも何らかの理由であなたもゼロたくない場合は、それらをオフに残すために慣用的である:

TestMailer.snap_shot_error("test1", "Errors", 
    {:file_name => File.basename(upload_file)}.merge(
    @client ? { :client_name => @client.client_name } : {})) 
:ハッシュでCLIENT_NAMEを、あなたは三項演算子とマージを使用することができますが

ビューのために、あなたはまた、三項演算子を使用することができます:あなたはそれもしてはならないことを要求した理由

<%= _("There were problems with file ") + @file_name + 
    (@client_name ? _(" for client ") + @client_name : '') %> 

そして今、私はあなたが@client_nameでやっているものを見ることを、私は表示されませんハッシュ。私が投稿した最初のコード例は、 ":client_name => @ client.client_name"にクライアントがあり、クライアントがなければ ":client_name => nil"を渡します。パスしない理由は何もありません:client_nameは、単にnil:client_nameを渡すのではなく、client_nameです。

+0

私はオプションでclient_nameキーを渡したくありません。 @clientが利用できない場合 –

+0

@krunal shah、私は実際にその可能性について説明するために自分の投稿を更新しました。アップデートを参照してください。 –

+0

お返事ありがとうございます。私の見解で同じ問題を解決するにはどうすればいいですか?私は私の質問を更新しました。 –

関連する問題