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

Bd6fb06295c8ff8003af041210c91daa?d=identicon&s=25 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.
6dbddfda34303f8d83620f7293612671?d=identicon&s=25 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
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 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>
8bc38b2e4e00c4df2a7f1dcdc46802f9?d=identicon&s=25 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.
Bd6fb06295c8ff8003af041210c91daa?d=identicon&s=25 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

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.