2010-11-24 9 views
0

私はRubyを初めて使っています。だから私は、次のコード行で混乱している:Ruby文法の質問

class CreateProducts < ActiveRecord::Migration 
    def self.up 
    create_table :products do |t| 
     t.string :title 
     t.text :description 
     t.string :image_url 
     t.decimal :price, :precision => 8, :scale => 2 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :products 
    end 

end 

ラインの一つは、私が最も混乱しますです:

t.string :title 

私はちょうどそれを理解することはできません。ですから、あなたは、この1行のコードを理解するために、私が読む必要があるルビー文法の部分について何かヒントを与えてくれるでしょうか?前もって感謝します。

答えて

3

これは普通のRubyのメッセージング構文で作成されますmigration fileと呼ばれています。

t.string :title 

は、唯一の引数としてリテラルシンボル:titletによって参照されるオブジェクトにメッセージ:stringを送信し、通過ブロックローカル変数t

  • 間接参照

    1. を意味
  • 0

    あなたはWhy's poignant guide to Ruby

    P.S.以内に答えを見つけるだろうそれはスペルの文法ですが、コードでは通常「構文」という言葉を使います。 :)私はここで少し推測するが、探査

    の基礎としててる

    1

    :タイトルは、Rubyの「シンボル」である - 高効率の紐状の定数を提供するために、基本的にハック - そうt.string :タイトルは、より一般的なオブジェクト指向言語でt.string("title")を呼び出すようなビットです。データベースのレコード構造を宣言しているようであれば、フィールドを実際に "文字列"型の "フィールド"と呼ぶことになります。

    +0

    メソッド呼び出しとしてオブジェクトの向きと何が関係しますか? –

    +1

    ':something'はシンボルであり、不変な文字列ではないため、' 'something ''と等価ではありません。シンボルは実際にはグローバルシンボルテーブルのインデックスであり、比較やハッシュキールックアップでははるかに効率的です。 – edgerunner

    +0

    @edgerunner:私はRuby特有の用語を忘れていました。何年か前からRubyをやっていましたが、一般的なコンピューティングの科学/オブジェクトレベルでは、それは不変の文字列だと思うと思います。それを確認するために、いいえ? –

    0

    にそのファイルを完全に理解し、クラス、継承、モジュール、メソッド呼び出しを理解する必要がありますブロック、シンボルなどがあります。