# Aggiungere un metodo: dove sbaglio?

**URL:** <https://www.ruby-forum.com/t/aggiungere-un-metodo-dove-sbaglio/219087>\
**Category:** IT\
**Created:** [April 20, 2012, 10:40am UTC](https://www.ruby-forum.com/t/aggiungere-un-metodo-dove-sbaglio/219087 "2012-04-20T10:40:00Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![dubstep](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/cdc98d/32.png) [@dubstep](https://www.ruby-forum.com/u/dubstep)\
**Post date:** [April 20, 2012, 10:40am UTC](https://www.ruby-forum.com/t/aggiungere-un-metodo-dove-sbaglio/219087/1 "2012-04-20T10:40:00Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![daneel\_olivaw](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@daneel\_olivaw](https://www.ruby-forum.com/u/daneel_olivaw)\
**Post date:** [April 20, 2012, 11:15am UTC](https://www.ruby-forum.com/t/aggiungere-un-metodo-dove-sbaglio/219087/2 "2012-04-20T11:15:57Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![daneel\_olivaw](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@daneel\_olivaw](https://www.ruby-forum.com/u/daneel_olivaw)\
**Post date:** [April 20, 2012, 11:22am UTC](https://www.ruby-forum.com/t/aggiungere-un-metodo-dove-sbaglio/219087/3 "2012-04-20T11:22:47Z")

</div>

2012/4/20 Daneel O. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[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](http://dev.mikamai.com/post/21429203461/manual-migrations-with-sequel)

hf

## Maurizio

My profile [https://plus.google.com/100973969013103507046/about](https://plus.google.com/100973969013103507046/about)

---

<div class="post-metadata">

**Author:** ![daneel\_olivaw](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@daneel\_olivaw](https://www.ruby-forum.com/u/daneel_olivaw)\
**Post date:** [April 20, 2012, 2:54pm UTC](https://www.ruby-forum.com/t/aggiungere-un-metodo-dove-sbaglio/219087/4 "2012-04-20T14:54:49Z")

</div>

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 🙂

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 🙂

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

---

<div class="post-metadata">

**Author:** ![daneel\_olivaw](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@daneel\_olivaw](https://www.ruby-forum.com/u/daneel_olivaw)\
**Post date:** [April 20, 2012, 11:25am UTC](https://www.ruby-forum.com/t/aggiungere-un-metodo-dove-sbaglio/219087/5 "2012-04-20T11:25:18Z")

</div>

On Fri, Apr 20, 2012 at 11:22 AM, maurizio de magnis \<  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\> wrote:

> 2012/4/20 Daneel O. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> [cut]

> Se preferisci Sequel ad ActiveRecord puoi buttare un occhio qui:
> 
> [http://dev.mikamai.com/post/21429203461/manual-migrations-with-sequel](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.
