2010-11-24 5 views
0

Je suis nouveau à ruby. Je suis confus par les lignes de code suivantes:Ruby grammaire question

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 

l'une des lignes me fait le plus confus est:

t.string :title 

Je ne peux pas le comprendre. Est-ce que l'un d'entre vous pourrait me donner un indice sur quelle partie de la grammaire ruby ​​je dois lire pour comprendre cette seule ligne de code? Merci d'avance.

Répondre

3

Ceci est tout à fait normal syntaxe de messagerie Ruby.

t.string :title 

signifie

  1. déréférencer le bloc variable locale t
  2. envoyer le message :string à l'objet référencé par t et passer le symbole littéral :title comme le seul argument
0

Vous trouverez la réponse dans Why's poignant guide to Ruby

post-scriptum C'est de la grammaire orthographiée, mais pour le code, nous utilisons habituellement le mot «syntaxe». :)

1

Je devine un peu, mais comme base pour l'exploration

: le titre est un « symbole » Ruby - essentiellement un hack pour fournir des constantes filiformes d'efficacité supérieure - si t.string : title est un peu comme appeler un t.string("title") dans des langages OO plus populaires, et étant donné que vous semblez déclarer une structure d'enregistrement pour la base de données, je dirais que l'ajout d'un champ est effectivement appelé "title" avec le type "string".

+0

qu'est-ce que() comme appel de méthode a à voir avec l'orientation de l'objet? –

+1

': quelque chose' est un symbole, pas une chaîne immuable et donc pas équivalent à' 'quelque chose ''. Un symbole est en fait un index sur la table de symboles globale, et beaucoup plus efficace dans les comparaisons et les recherches de clés de hachage. – edgerunner

+0

@edgerunner: J'avais oublié la terminologie propre à Ruby - il y a quelques années que j'ai fait du Ruby, mais à un niveau général science/objet, je pense qu'il est juste de dire que c'est une chaîne immuable pour confirmer cela, non? –

0

à entièrement comprendre ce fichier, vous devez comprendre les classes, l'héritage, les modules, les calli de méthode ng, blocs et symboles.