我目前正在做 ruby?? on rails 初學者教程,但我不了解遷移的具體語法。
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 指的是什么?
:article 是什么意思?它是一個符號嗎?
|t| 是什么 在這種情況下指。換一張新桌子?
對此代碼的任何背景關系和更深入的解釋將不勝感激。
uj5u.com熱心網友回復:
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將接受輸入并將每個元素一個接一個地傳遞給塊。我們通過這個塊引數參考當前元素。
因此,考慮到所有這些,我們可以像這樣重寫這個函式呼叫:
create_table(:articles) do |table|
<do stuff with table>
end
請記住,括號在 Ruby 中通常是可選的,這就是為什么它可以寫成create_table :articles
用更簡單的語言來說,這就是“創建一個名稱為 items 的表,然后使用塊自定義該表”。它在塊內將各個列添加到表中。
我建議閱讀更多關于 Ruby 塊的內容,因為它是一個非常有價值和重要的概念。
如果你想撰寫一個接受常規引數和塊的方法,它可能看起來像這樣:
def my_function(symbol)
yield(symbol)
end
然后呼叫它:
my_function :some_symbol do |symbol|
puts "the value is #{symbol}"
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/433067.html
上一篇:為什么泛型型別箭頭函式顯示錯誤?
