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
我目前正在 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