简体   繁体   中英

Rails 3 plugin scope_out doesn't work

Hey, I'm tried to install the scope_out plugin through "rails plugin install http://scope-out-rails.googlecode.com/svn/trunk/ "

and added scope_out to a model of 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

but I always get the error: undefined method `scope_out'

The scope_out plugin is not compatible with Rails3.

Judging from the explanation of the plugin, it may very well be obsolete now. Instead, you can write those scopes as:

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

More information about the new ActiveRelation syntax here .

You can write this using raw ARel objects as well:

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

I've been using a new gem called MetaWhere to augment standard ARel. It would let you write not_deleted as:

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

If you're using Rails 3.1, try out the successor to MetaWhere called Squeel

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM