2012-03-26 5 views
3

私はRails 3 in Actionの本をフォローしており、モデル内でオーバーライドto_sについて話しています。私はRubyであなたが"#{value}"で二重引用符内の値を表示することができますが、二重の疑問符で何アップだということを知っている誰かが私に次のコードを説明することはできますか?

def to_s 
    "#{email} (#{admin? ? "Admin" : "User"})" 
end 

:コードは、次のですか?

答えて

7

それはstring interpolationです。 "#{email} (#{admin? ? "Admin" : "User"})"この文脈AdminUserに、引用符で囲まれた結果

email.to_s + " (" + if admin? then "Admin" else "User" end + ")" 

ある

email.to_s + " (" + (admin? ? "Admin" : "User") + ")" 

に相当する定数として、文字列ではなくとして使用されます。

+0

「条件? true_result:false_result'構文は[三項演算子](http://en.wikipedia.org/wiki/Ternary_operation)btwと呼ばれます。ほとんどの言語は 'if ... then ... else'の省略形として見つけることができます –

+0

ありがとう!文字列補間は間違いなく私は続行する前にもっと読むつもりです。私はそれに精通しているように思える。 – ruevaughn

1

この機能はとても呼び出し

user_1.to_s 

が文字列

を返します

すなわち
user_1 = {:email => "[email protected]", :admin => true} 

...電子メールで、それは彼らが管理者またはユーザーであるかどうかの文字列を返します

"[email protected] Admin" 
2

?ブール値を返します(おそらくコントローラ/ヘルパーメソッドまたはモデル内のどこかで定義された)関数は、(真または偽)で、次の疑問符は同じようです前の状態

if admin? == true 
"Admin" 
else 
"User" 

最初の部分があれば「:」真の場合のものですそしてもう一方は二重の疑問符としてそれを見ないでください偽の場合のために

2

で、最初の疑問符は、メソッド名(Rubyが方法がで終わる名前を付けることができます「!」、「?」、「=」の一部であります、 "[]"など)。 adminはブール値のActiveRecordなので、管理者を追加しますか?ユーザーが管理者の場合はtrueを返し、そうでない場合はfalseを返します。

他の疑問符(コロンと一緒に使用されて:)とあなたはそれが好きで見ることができます:

condition ? statement_1 : statement_2 

条件が真の場合、最初の文は、それがevalueted秒1が他の、実行されます。

だから、一緒にこれら二つのものを入れて、あなたは括弧の間の「管理者」または「ユーザー」という単語を追加し、文字列の連結を持っています。

関連する問題