Ruby ActiveRecord 中的语法

Ruby syntax in ActiveRecord

我目前正在 rails 初学者教程中学习 ruby,我不了解迁移的具体语法。

class CreateArticles < ActiveRecord::Migration[7.0]
  def change
    create_table :articles do |t|
      t.string :title
      t.text :body

      t.timestamps
    end
  end
end

具体来说,我不明白第 3 行方法更改中的语法。

create_table指的是什么?

:articles 是什么意思?是符号吗?

什么是|t|在这种情况下指的是。要新的 table?

如果能提供有关此代码的任何上下文和更深入的解释,我们将不胜感激。

Ruby 图书馆经常使用“DSL”(领域特定语言)。这是其中的一个示例,但是一旦您理解了 Ruby 语法,您就会发现它实际上只是常规的 Ruby.

你说得对create_table是一个方法调用,:articles是一个符号

还要记住 ruby 中的函数可以采用块参数,它有两种可能的语法:

[1,2,3].each { |num| <block content> }

# or ..
[1,2,3].each do |num|
  <block content>
end

这里|num|是块参数。在引擎盖下,each 将获取输入并将每个元素 one-by-one 传递给块。我们通过这个块参数引用当前元素。

所以,考虑到所有这些,我们可以像这样重写这个函数调用:

create_table(:articles) do |table|
  <do stuff with table>
end

记住括号在Ruby中通常是可选的,这就是为什么它可以写成create_table :articles

用更通俗的语言来说,这就是说“创建一个名为 articles 的 table,然后使用块自定义 table ”。它在块内将各个列添加到 table.

我建议阅读更多关于 Ruby 块的内容,因为这是一个非常有价值和重要的概念。

如果你想写一个接受常规参数和块的方法,它可能看起来像这样:

def my_function(symbol)
  yield(symbol)
end

然后调用它:

my_function :some_symbol do |symbol|
  puts "the value is #{symbol}"
end