Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Ruby
Ruby Le forum sur la programmation Ruby. Voir aussi la FAQ Ruby et les cours Ruby.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/11/2011, 00h22   #1
Invité de passage
 
Inscription : novembre 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 3
Points : 1
Points : 1
Par défaut Ruby+Sequel, principes de base (newbie)

Bonjour!

Je suis nouveau avec le language Ruby qui a l'air vraiment génial.
J'ai décidé d'utiliser Sequel comme ORM pour ma première application.

Du coup, il y a des principes de base que je ne maitrise pas encore et peut être pouvez vous m'aider.

Donc je crée une table "host" avec l'outil de migration (db=mysql), ce qui fonctionne:
Code :
1
2
3
4
5
 
    create_table(:hosts) do    
        primary_key :host_id
        String :host_name, :size=>255
    end
Puis je définie le modèle correspondant:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
class Host < Sequel::Model
    plugin :schema
 
    unless table_exists?
      set_schema do
        primary_key :id
        String :host_name, :size=>255
      end
    end
 
    def initialize(p_host_name)
      @host_name = p_host_name;
    end
  end
Je veux ensuite créer un objet "host", le manipuler éventuellement, puis le sauver dans la base de donnée:
Code :
1
2
3
 
  myhost = Host.new(:host_name=>'test')
  myhost.save
Et là patatra:
Code :
1
2
3
4
5
6
7
8
9
sequel-3.29.0/lib/sequel/model/base.rb:1094:in `pk': undefined method `[]' for nil:NilClass (NoMethodError)
from sequel-3.29.0/lib/sequel/model/base.rb:1102:in `pk_hash'
from sequel-3.29.0/lib/sequel/model/base.rb:1246:in `this'
from sequel-3.29.0/lib/sequel/model/base.rb:1657:in `this_server'
from sequel-3.29.0/lib/sequel/model/base.rb:1568:in `checked_transaction'
from sequel-3.29.0/lib/sequel/model/base.rb:1155:in `block in save'
from sequel-3.29.0/lib/sequel/model/base.rb:1556:in `checked_save_failure'
from sequel-3.29.0/lib/sequel/model/base.rb:1155:in `save'
from LinxModel.rb:15:in `<main>'
Alors je pense qu'il y a quelque chose que je n'ai pas saisi, d'autant que je ne suis pas encore familier avec le langage Ruby... Est-ce que vous pouvez m'aider? Merci!
rocknroll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 01h58   #2
Invité de passage
 
Inscription : novembre 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 3
Points : 1
Points : 1
Par défaut un début de réponse

Voilà les problèmes que j'ai trouvé:
- d'une part je définie "id" d'un coté et "host_id" de l'autre
- ensuite on a pas besoin de redéfinir un schéma dans le modèle: apparement Sequel interroge la base de donnée au moment où la classe est chargée pour conaitre la définition du modèle
- enfin et surtout, c'est la méthode initialize que j'ai définie qui provoque cette erreur. Si j'enlève cette méthode ça fonctionne.

D'où ma nouvelle question, pourquoi si j'enlève initialize ça fonctionne? Est-ce parce qu'il masque l'initialize défini dans la superclass Sequel::Model ? Et dans ce cas, comment je peux quand même rajouter ma propre méthode initialize dans mon modèle?
rocknroll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 02h17   #3
Invité de passage
 
Inscription : novembre 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 3
Points : 1
Points : 1
Par défaut la réponse

Code :
1
2
3
4
5
6
7
8
 
class Host < Sequel::Model
 
    def initialize(p_host_name)
      super(:host_name=>p_host_name)
    end
 
  end
rocknroll est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h30.


 
 
 
 
Partenaires

Hébergement Web