2009-09-01 6 views

答えて

9

それは私には完全に合理的です。あなたはif(parent_id = if params...)の前に課題を移動したり、3値を使うことができますが、結果が良く見えるとは思いません。

PARENT_IDは、あなたは、単に書くことができ、その行の前にゼロまたは未定義の場合:

parent_id = params[:parent_id] unless params[:parent_type] == "Order" 
+0

素晴らしい...これは物事を行うためのルビーの方法です、割り当てが前に行きます。これは、「反対の」理由があるため、同じ規則を逆にすることができます。 –

7

それで本当に何も間違って-ですが、より簡潔に行うことができます。私はそれはそれは方法罰金だと思います

parent_id = if (params[:parent_type] == "Order") 
    nil 
else 
    params[:parent_id] 
end 
+2

タイプミスがあります。 ">"は "?" –

+0

私は本当に2番目のオプションが好きです。両方のオプションが最終的にparent_idに値を割り当てることが明らかになりました。 – nimrodm

+0

xが既に割り当てられている場合は、xを単独のままにしておく "x = y以外のz"形式とは異なり、3項形式は常に値を割り当てます(if-elseも同じです)。したがって、if-else形式を複製する1行のライナーが必要な場合は、3項と一緒に行きます。 – zetetic

5

:また

parent_id = (params[:parent_type] == "Order") ? nil : params[:parent_id] 

。私はRubyの人です。そのように書くのはあなたを笑っていません。コードが何をしているのかは明らかですし、実際のコードの重複はないので、私はそれについて心配しません。

+0

私もここに同意します... –

2

私が好き:

parent_id = (params[:parent_type] == "Order" ? nil : params[:parent_id])
1

もう一つのバリエーション:

parent_id = (params[:parent_type] == "Order") && params[:parent_id] 
+0

非常に表現的な方法ではありません。実際には論理演算子がブール値を返さないという事実をかなり混乱させます... – luca

0

我々はルビーを使用することができます三項演算子。そのような何か:あなたはそれをしなかった別の方法で簡単なルビーのif-elseを

parent_id = params[:parent_id] unless params[:parent_type] == "Order" 

または書き込み:parent_idnil値が設定されている

parent_id = params[:parent_type] == "Order" ? nil : params[:parent_id] 

場合は、私たちがない限り構文を書くことができます

parent_id = if (params[:parent_type] == "Order") 
    nil 
else 
    params[:parent_id] 
end 

詳細については、Idiomatic Rubyのコードについては、awesome articleが見つかりました。

関連する問題