你能解释一下这个Ruby代码中发生了什么吗?

sam*_*moz 6 ruby ruby-on-rails

我正在尝试学习Ruby以及Ruby on Rails.我正在跟随Learning Rails,第1版,但我很难理解一些代码.

我通常使用C,C++或Java工作,所以Ruby对我来说是一个很大的变化.

我目前难以使用以下数据库迁移器代码块:

  def self.up
    create_table :entries do |t|
      t.string :name
      t.timestamps
    end
  end
Run Code Online (Sandbox Code Playgroud)

t变量来自哪里?它究竟代表什么?它有点像for(i = 0; i <5; i ++)语句中的'i'吗?

此外,在哪里:条目定义在?(条目是我的控制器的名称,但该功能如何知道?)

Log*_*ldo 9

:entries是一个符号文字,它是一个像7或的字面值"a string".没有什么可定义的(顺便说一句,该函数不知道你的控制器的名称).

t是您传递给create_tables方法的块的参数.你在这里写的大致类似于:

void anonymous_block(Table *t) {
   t->string("name");
   t->timestamps();
}

...

create_table("entries", &anonymous_block);
Run Code Online (Sandbox Code Playgroud)

在C++中.create_table调用您的块并向其传递一个您已命名的参数t.我建议你得到一本关于红宝石而不是铁轨的入门书.我推荐David A. Black的Ruby For Rails.