在rails迁移循环中是create_table



当我生成一个模型时:

rails g model Post title content favorite:boolean

Rails创建了一个迁移文件,如下所示:

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.string :title
      t.string :content
      t.boolean :favorite
      t.timestamps null: false
    end
  end
end

有一个create_table(:posts),我一直想知道它看起来和行为都像一个循环。但我在ruby语言中没有发现任何提到类似这样的循环的东西:

create_table() do
  # ...
end

我发现了每个循环、times循环、while循环等…以及许多其他循环,但我从未见过这个循环或任何在实际Ruby语言中看起来相似的循环。这实际上是我忽略的Ruby语言的一部分吗?还是由ActiveRecord和/或Rails创建的?如果创建了这样一个循环,但没有内置,他们是如何做到的(即:如何创建看起来像这样的自定义循环)?

不,这不是一个循环。create_table只是ActiveRecord::ConnectionAdapters::SchemaStatements类中的一个方法

来自文档:

使用create_table有两种方法。您可以使用块形式或常规形式。

以下只是使用create_table方法的块形式,您可以将块传递给它:

create_table(:table_name) do
  # ...
end

这是rails的东西,而不是ruby。rails中确实有更多类似的语法。

您可以以类似的方式使用link_toform_for

所有有一些do和object的东西,看起来都像一个循环语法。

此处的link_to语法:

link_to(url, html_options = {}) do
  # name
end

此处的form_for语法:

<%= form_for :person do |f| %>
  <%= f.submit %>
<% end %>

最新更新