2010-11-09 11 views
0

Je suis en train d'interroger une colonne dans mon modèle ici:Pourquoi ne puis-je pas interroger mon modèle DataMapper?

require 'rubygems' 
require 'dm-core' 
require 'dm-migrations' 
require 'dm-aggregates' 

db_name = 'mydb.sqlite' 

DataMapper::Logger.new($stdout, :debug) 
DataMapper.setup(:default, 'sqlite://' + Dir.pwd + '/' + db_name) 

class Context 
    include DataMapper::Resource 
    property :id,   Serial 
    property :order,  Integer 

    def initialize 
    self.order = (self.class.max(:order) || 0) + 1 
    end 

    def move_up 
    temp = self.class.first(:order => (self.order - 1)) 
    temp.order += 1 
    temp.save 
    self.order -= 1 
    self.save 
    end 

end 

DataMapper.finalize 
DataMapper.auto_upgrade! 

Mais quand je crée quelques cas que je reçois l'erreur suivante quand je l'appelle la méthode move_up.

Failure/Error: context2.move_up 
+options[:order]+ entry 1 of an unsupported object Fixnum 
# ./context.rb:11:in `move_up' 

Nonobstant les conditions aux bords, pourquoi cela ne fonctionne-t-il pas?

Répondre

3

: order est un mot réservé car c'est l'une des options que vous passez à une requête. il suffit de le renommer en quelque chose de différent et cela fonctionnera

+0

Ugh, le front smack. Merci encore solnic. – lobati

+0

Heh :) btw - Je viens de faire une modification qui fera que Property criera à vous si vous essayez d'utiliser l'une des options de requête comme un nom de propriété, comme: order,: fields Vous pouvez consulter le commit pour voir quels noms sont réservés: https://github.com/datamapper/dm-core/commit/ea8d92b48af431a3197a8d589730e0f638709cad – solnic

+0

Génial, merci! Je serai impatient de la mise à jour de la gemme. Profitant d'utiliser dm. – lobati