Forum: Italian Ruby user group Aggiungere un metodo: dove sbaglio?

Posted by Daneel Olivaw (daneel_olivaw)
on 2012-04-20 10:40
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.
Posted by Tommaso Visconti (Guest)
on 2012-04-20 11:15
(Received via mailing list)
Il 20/04/12 10:40, Daneel Olivaw 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
Posted by Maurizio De magnis (olistik)
on 2012-04-20 11:22
(Received via mailing list)
2012/4/20 Daneel Olivaw <daneel.olivaw.r@gmail.com>
[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-mig...

hf

Maurizio
--
My profile <https://plus.google.com/100973969013103507046/about>
Posted by Riccardo Lucatuorto (riccardo_l)
on 2012-04-20 11:25
(Received via mailing list)
On Fri, Apr 20, 2012 at 11:22 AM, maurizio de magnis <
maurizio.demagnis@gmail.com> wrote:

> 2012/4/20 Daneel Olivaw <daneel.olivaw.r@gmail.com>
> [cut]
>


> Se preferisci Sequel ad ActiveRecord puoi buttare un occhio qui:
>
> http://dev.mikamai.com/post/21429203461/manual-mig...
>
> 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.
Posted by Daneel Olivaw (daneel_olivaw)
on 2012-04-20 14:54
Tommaso Visconti 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 :-)
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.