2010-12-04 8 views
1

Hey, J'ai essayé d'installer le plugin scope_out par "rails de plugin installer http://scope-out-rails.googlecode.com/svn/trunk/"Rails scope_out 3 plugin ne fonctionne pas

et ajouté scope_out à un modèle de la mine:

class MessageCopy < ActiveRecord::Base 
    belongs_to :message 
    belongs_to :recipient, :class_name => "User" 
    belongs_to :folder 
    delegate :author, :created_at, :subject, :body, :recipients, :to => :message 
    scope_out :deleted 
    scope_out :not_deleted, :conditions => ["deleted IS NULL OR deleted = ?", false] 
end 

mais j'ai toujours l'erreur: la méthode undefined `portée_out '

Répondre

3

Le plugin scope_out n'est pas compatible avec Rails3.

À en juger par l'explication du plugin, il peut très bien être obsolète maintenant. , Vous pouvez plutôt écrire ces champs comme:

class MessageCopy < ActiveRecord::Base 
    ... 
    scope :deleted, where(:deleted => true) 
    scope :not_deleted, where("deleted IS NULL OR deleted = ?", false) 
end 

Plus d'informations sur la nouvelle syntaxe ActiveRelation here.

Vous pouvez écrire à l'aide d'objets Arel brut ainsi:

where(arel_table[:deleted].eq(nil).or(arel_table[:deleted].eq(false))) 

Je me sers un nouveau bijou appelé MetaWhere pour augmenter Arel standard. Il vous permettra d'écrire not_deleted comme:

scope :not_deleted, where({ :deleted => nil } | { :deleted => false }) 

Si vous utilisez Rails 3.1, essayez le successeur de MetaWhere appelé Squeel

scope :not_deleted, where{ (deleted == nil) | (deleted == false) } 
+0

Voulez-vous l'amabilité de signaler où est la 'portée .or (scope) 'vient de la syntaxe? – clyfe

+0

@clyfe maintenant que vous le mentionnez, MetaWhere pourrait l'ajouter. Je vais mettre à jour la réponse. –

Questions connexes