加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – Rails,防止Model.scoped的弃用警告,find(:all)和关系#a

发布时间:2020-12-17 02:39:33 所属栏目:百科 来源:网络整理
导读:我有测试通过但显示 $rspec spec/event_calendar_spec.rb ......DEPRECATION WARNING: Model.scoped is deprecated. Please use Model.all instead. (called from events_for_date_range at /home/durrantm/Dropbox/96_2013/work/code/ruby/event_calendar/l
我有测试通过但显示

$rspec spec/event_calendar_spec.rb 
......DEPRECATION WARNING: Model.scoped is deprecated. Please use Model.all instead. (called from events_for_date_range at /home/durrantm/Dropbox/96_2013/work/code/ruby/event_calendar/lib/event_calendar.rb:52)
DEPRECATION WARNING: Calling #find(:all) is deprecated. Please call #all directly instead. You have also used finder options. These are also deprecated. Please build a scope instead of using finder options. (called from events_for_date_range at /home/durrantm/Dropbox/96_2013/work/code/ruby/event_calendar/lib/event_calendar.rb:52)
DEPRECATION WARNING: Relation#all is deprecated. If you want to eager-load a relation,you can call #load (e.g. `Post.where(published: true).load`). If you want to get an array of records from a relation,you can call #to_a (e.g. `Post.where(published: true).to_a`). (called from events_for_date_range at /home/durrantm/Dropbox/96_2013/work/code/ruby/event_calendar/lib/event_calendar.rb:52)

该模型是:

50     # Get the events overlapping the given start and end dates
 51     def events_for_date_range(start_d,end_d,find_options = {})
 52       self.scoped(find_options).find(
 53         :all,54         :conditions => [ "(? <= #{self.quoted_table_name}.#{self.end_at_field}) AND (#{self.quoted_table_name}.#{self.start_at_field}< ?)",start_d.to_time.utc,end_d.to_time.utc ],55         :order => "#{self.quoted_table_name}.#{self.start_at_field} ASC"
 56       )
 57     end

我尝试了几种删除.scoped,删除:all并使用where但似乎没有工作,例如:

50     # Get the events overlapping the given start and end dates
 51     def events_for_date_range(start_d,find_options = {})
 52       self.all.where(find_options,53         :conditions => [ "(? <= #{self.quoted_table_name}.#{self.end_at_field}) AND (#{self.quoted_table_name}.#{self.start_at_field}< ?)",54         :order => "#{self.quoted_table_name}.#{self.start_at_field} ASC"
 55       ) 
 56     end

放弃:

expected: [#<CustomEvent id: 1,custom_start_at: "2013-10-27 13:12:00",custom_end_at: "2013-10-29 13:12:00">]
        got: #<ActiveRecord::Relation [#<CustomEvent id: 1,custom_start_at: "2013-10-27 17:12:00",custom_end_at: "2013-10-29 17:12

如何更新查找以不显示弃用警告?

解决方法

一切都是隐含的,你在使用范围时不需要它.

50     # Get the events overlapping the given start and end dates
 51     def events_for_date_range(start_d,find_options = {})
 52       self.where(find_options,54         :order => "#{self.quoted_table_name}.#{self.start_at_field} ASC"
 55       ) 
 56     end

如果您确实想要所有记录,则只能使用all:CustomEvent.all.如果您担心默认范围,可以执行以下操作:

50     # Get the events overlapping the given start and end dates
 51     def events_for_date_range(start_d,find_options = {})
 52       self.unscoped.where(find_options,54         :order => "#{self.quoted_table_name}.#{self.start_at_field} ASC"
 55       ) 
 56     end

如果您使用rails 4中的all作为强制加载的方法,那么现在应该使用load:

50     # Get the events overlapping the given start and end dates
 51     def events_for_date_range(start_d,54         :order => "#{self.quoted_table_name}.#{self.start_at_field} ASC"
 55       ).load
 56     end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读