find(:first) and find(:all) are deprecated

后端 未结 3 400
死守一世寂寞
死守一世寂寞 2020-12-19 06:36

I am using RubyMine with rails 3.2.12 and I am getting following deprecated warning in my IDE. Any Idea How can I solve this deprecated warning?

相关标签:
3条回答
  • 2020-12-19 06:49

    Use the new ActiveRecord::Relation stuff that was added in Rails 3. Find more info here: http://guides.rubyonrails.org/active_record_querying.html

    Instead of #find, use #first, #last, #all, etc. on your model, and the methods that return a ActiveRecord::Relation, like #where.

    #User.find(:first)
    User.first
    
    #User.find(:all, :conditions => {:foo => true})
    User.where(:foo => true).all
    
    0 讨论(0)
  • 2020-12-19 06:56

    I changed my answer after @keithepley comment

    #Post.find(:all, :conditions => { :approved => true })
    Post.where(:approved => true).all
    
    #Post.find(:first, :conditions => { :approved => true })
    Post.where(:approved => true).first
    or
    post = Post.first  or post = Post.first!
    or
    post = Post.last   or post = Post.last!
    

    You can read more from this locations

    deprecated statement

    Post.find(:all, :conditions => { :approved => true })
    

    better version

    Post.all(:conditions => { :approved => true })
    

    best version (1)

    named_scope :approved, :conditions => { :approved => true }
    Post.approved.all
    

    best version (2)

    Post.scoped(:conditions => { :approved => true }).all
    

    0 讨论(0)
  • 2020-12-19 06:57

    Here is the Rails 3-4 way of doing it:

    Post.where(approved: true) # All accepted posts
    Post.find_by_approved(true) # The first accepted post
    # Or Post.find_by(approved: true)
    # Or Post.where(approved: true).first
    Post.first
    Post.last
    Post.all
    
    0 讨论(0)
提交回复
热议问题