私はRails 3 in Actionの本をフォローしており、モデル内でオーバーライドto_s
について話しています。私はRubyであなたが"#{value}"
で二重引用符内の値を表示することができますが、二重の疑問符で何アップだということを知っている誰かが私に次のコードを説明することはできますか?
def to_s
"#{email} (#{admin? ? "Admin" : "User"})"
end
:コードは、次のですか?
私はRails 3 in Actionの本をフォローしており、モデル内でオーバーライドto_s
について話しています。私はRubyであなたが"#{value}"
で二重引用符内の値を表示することができますが、二重の疑問符で何アップだということを知っている誰かが私に次のコードを説明することはできますか?
def to_s
"#{email} (#{admin? ? "Admin" : "User"})"
end
:コードは、次のですか?
それはstring interpolationです。 "#{email} (#{admin? ? "Admin" : "User"})"
この文脈Admin
とUser
に、引用符で囲まれた結果
email.to_s + " (" + if admin? then "Admin" else "User" end + ")"
ある
email.to_s + " (" + (admin? ? "Admin" : "User") + ")"
に相当する定数として、文字列ではなくとして使用されます。
この機能はとても呼び出し
user_1.to_s
が文字列
を返します すなわちuser_1 = {:email => "[email protected]", :admin => true}
...電子メールで、それは彼らが管理者またはユーザーであるかどうかの文字列を返します
"[email protected] Admin"
最初の疑問符は、レール内の属性のクエリーメソッドです。 (あなたがそのメソッドを再定義/上書きしませんでした提供)http://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Attribute+query+methods
その属性存在かどうかを確認するための簡単な方法です。実際には管理者
?ブール値を返します(おそらくコントローラ/ヘルパーメソッドまたはモデル内のどこかで定義された)関数は、(真または偽)で、次の疑問符は同じようです前の状態
if admin? == true
"Admin"
else
"User"
最初の部分があれば「:」真の場合のものですそしてもう一方は二重の疑問符としてそれを見ないでください偽の場合のために
で、最初の疑問符は、メソッド名(Rubyが方法がで終わる名前を付けることができます「!」、「?」、「=」の一部であります、 "[]"など)。 adminはブール値のActiveRecordなので、管理者を追加しますか?ユーザーが管理者の場合はtrueを返し、そうでない場合はfalseを返します。
他の疑問符(コロンと一緒に使用されて:)とあなたはそれが好きで見ることができます:
condition ? statement_1 : statement_2
条件が真の場合、最初の文は、それがevalueted秒1が他の、実行されます。
だから、一緒にこれら二つのものを入れて、あなたは括弧の間の「管理者」または「ユーザー」という単語を追加し、文字列の連結を持っています。
「条件? true_result:false_result'構文は[三項演算子](http://en.wikipedia.org/wiki/Ternary_operation)btwと呼ばれます。ほとんどの言語は 'if ... then ... else'の省略形として見つけることができます –
ありがとう!文字列補間は間違いなく私は続行する前にもっと読むつもりです。私はそれに精通しているように思える。 – ruevaughn