Ruby on rails 当使用rails创建表时,t做什么
我在中看到以下代码:Ruby on rails 当使用rails创建表时,t做什么,ruby-on-rails,rake,Ruby On Rails,Rake,我在中看到以下代码: class CreateProductsProc def create_table(table_name, options = {}) td = create_table_definition table_name, options[:temporary], options[:options] # blah blah yield td if block_given? # blah blah end def create_table(table_nam
class CreateProducts
我搞不懂的是“做”是为了什么。它有什么好处?您将
块
(在本例中为匿名方法)传递给创建表
,而创建表
将返回表定义的实例。当您将块的第一个参数指定为t
时,您正在捕获该表定义。请在此处查看来源:
更具体地说:
在第184行,我们将该表定义导出到匿名函数(block
)。这基本上就是正在发生的事情:
def create_table(table_name, options = {})
td = create_table_definition table_name, options[:temporary], options[:options]
# blah blah
# YOUR BLOCK
td.string :name
td.text :description
td.timestamps
# END BLOCK
# blah blah
end
它是一个块,这是Ruby语言的一个特性。它们基本上是lambdas,不是lambdas<代码>lambda
s是lambda。这与Proc
不同,后者是块的实例:defx(&b);b、 阶级;结束;x{}#=>Proc
def create_table(table_name, options = {})
td = create_table_definition table_name, options[:temporary], options[:options]
# blah blah
yield td if block_given?
# blah blah
end
def create_table(table_name, options = {})
td = create_table_definition table_name, options[:temporary], options[:options]
# blah blah
# YOUR BLOCK
td.string :name
td.text :description
td.timestamps
# END BLOCK
# blah blah
end