Aggiungere un metodo: dove sbaglio?

Buongiorno lista/forum.

Altra richiesta di aiuto dal profondo della mia ignoranza.

Sto facendo un accrocchio che dovrebbe modificare il database se
lanciato… un po’ quello che fa il comando “migrate” sotto rails, ma
dato che sono su un programma ruby e gtk, mi manca l’automatismo.

Per ora mi sto occupando di aggiungere delle colonne ad una tabella.
L’idea è di avere un’array (“array” è femminile o maschile?) con dentro
degli hash per ogni colonna che contengono le caratteristiche di
quest’ultima, in modo da passarle al metodo apposito di activerecord e
generare le colonne nella tabella del database, qualcosa del genere:

colonnenuove = [{“nome” => “colonna1”, “tipo” => “string”, “default” =>
“”, “required” => “false”, “limit” => “10”}, {“nome” => “colonna2”,
“tipo” => “integer”, “default” => “0”, “required” => “false”}, {ecc.}]

Poi avrei la classe (all’incirca):

class ModTabella < ActiveRecord::Migration

def self.up(colonna)
add_column :tabella, :#{colonna[“nome”]}, :#{colonna["tipo]},
:default => #{colonna[“default”]}
end

end

e per chiamarla dovrei fare tipo così:

colonnenuove.each do |colonna|
ModAnimals.up(colonna)
end

Ruby però mi dice: “`up’: wrong number of arguments (1 for 0)
(ArgumentError)”

evidentemente sto sbagliando qualcosa, ma data la mia scarsa competenza
non riesco a venirne fuori… avete suggerimenti?

Ah, se esiste già una gemma che fa qualcosa del genere linkatela pure,
ma visto che ci sono vorrei comunque tentare di fare la cosa a mano,
così magari imparo qualcosa di più.

Come sempre grazie e a presto.

Il 20/04/12 10:40, Daneel O. ha scritto:

Buongiorno lista/forum.

Altra richiesta di aiuto dal profondo della mia ignoranza.

Sto facendo un accrocchio che dovrebbe modificare il database se
lanciato… un po’ quello che fa il comando “migrate” sotto rails, ma
dato che sono su un programma ruby e gtk, mi manca l’automatismo.

Le migrazioni puoi usarle anche senza rails, fanno parte di ActiveRecord
che tu stai usando. Basta chiamare
ActiveRecord::Migrator.migrate(PATH_ALLA_CARTELLA_CON_LE_MIGRAZIONI)

colonnenuove.each do |colonna|
ModAnimals.up(colonna)
end

Ruby per mi dice: “`up’: wrong number of arguments (1 for 0)
(ArgumentError)”

evidentemente sto sbagliando qualcosa, ma data la mia scarsa competenza
non riesco a venirne fuori… avete suggerimenti?

ActiveRecord::Migrator.up non prende argomenti, da l l’errore.
Tra l’altro direi che questa espressione:

:#{colonna[“nome”]}

errata, devi usare:

colonna[“nome”].to_sym

Riguardo alla soluzione ti rimando, come detto prima, a
ActiveRecord::Migrator.migrate

2012/4/20 Daneel O. [email protected]
[cut]

Ah, se esiste gi una gemma che fa qualcosa del genere linkatela pure,
ma visto che ci sono vorrei comunque tentare di fare la cosa a mano,
cos magari imparo qualcosa di pi.

Se preferisci Sequel ad ActiveRecord puoi buttare un occhio qui:

http://dev.mikamai.com/post/21429203461/manual-migrations-with-sequel

hf

Maurizio

My profile https://plus.google.com/100973969013103507046/about

Tommaso V. wrote in post #1057539:

Le migrazioni puoi usarle anche senza rails, fanno parte di ActiveRecord
che tu stai usando. Basta chiamare
ActiveRecord::Migrator.migrate(PATH_ALLA_CARTELLA_CON_LE_MIGRAZIONI)

Ah, ecco.
Caspita, con tutta quella automagia di rails pensavo ci fosse sotto
dell’altro :slight_smile:

Ci do un’occhiata.

ActiveRecord::Migrator.up non prende argomenti, da l l’errore.
Tra l’altro direi che questa espressione:

:#{colonna[“nome”]}

errata, devi usare:

colonna[“nome”].to_sym

Riguardo alla soluzione ti rimando, come detto prima, a
ActiveRecord::Migrator.migrate

Grazie :slight_smile:

Per i consigli su Datamapper e Sequel, no, non li ho mai provati; vedrò
di approfondire se trovo tempo, grazie anche a voi :slight_smile:

On Fri, Apr 20, 2012 at 11:22 AM, maurizio de magnis <
[email protected]> wrote:

2012/4/20 Daneel O. [email protected]
[cut]

Se preferisci Sequel ad ActiveRecord puoi buttare un occhio qui:

http://dev.mikamai.com/post/21429203461/manual-migrations-with-sequel

hf

Maurizio

Ma Datamapper non lo usa nessuno? A me piace molto, anche se ancora non
l’ho provato.


Riccardo

L’esperienza quello che ottieni quando, non ottieni quello che
desideri.