Una delle lotte con l'apprendimento Ruby è che, come Smalltalk et al, si arriva a passare il codice in giro così come i dati . Un modo in cui è possibile passare il codice a un metodo è con un blocco di codice. È quindi possibile chiamare il blocco di codice nella definizione del metodo con yield
che dice "inserire questo blocco di codice al posto di yield
":
def do_it
yield
end
do_it { 2 + 4 }
=> 6
Vedrete anche di inviare i parametri nel blocco di codice dalla definizione del metodo. Ecco dove | t | entra:
def do_it_with_ten
yield 10
end
do_it_with_ten { |t| (2 + 4) * t }
=> 60
Si noti che le parentesi graffe sono equivalenti a do..end.
Sto indovinando che questo è il codice che avete trovato con resa in esso:
def create_table(name, options = {})
table_definition = TableDefinition.new(self)
table_definition.primary_key(options[:primary_key] || "id") unless options[:id] == false
yield table_definition
if options[:force]
drop_table(name) rescue nil
end
create_sql = "CREATE#{' TEMPORARY' if options[:temporary]} TABLE "
create_sql << "#{name} ("
create_sql << table_definition.to_sql
create_sql << ") #{options[:options]}"
execute create_sql
end
Questo è esattamente quello che stai cercando. Questa è la definizione del metodo create_table che stiamo chiamando. Puoi vedere la resa con il parametro table_definition
.
Hai letto http://guides.rubyonrails.org/active_record_migrations.html#creating-a-table? Se è così, forse puoi chiedere delle cose che non sono già trattate lì. –
Utilizzare la punteggiatura inglese quando si scrive in inglese. – sawa
@sawa mi dispiace per il mio cattivo inglese –