弃用警告:不建议将选项传递给#find

时间:2013-08-20 14:40:47

标签: ruby-on-rails ruby-on-rails-3.2 ruby-on-rails-4

在我的消息模型中,我有读取消息的方法,我在消息控制器中使用它。但是这个方法有些问题,因为当我运行测试时我有错误:

DEPRECATION WARNING: Passing options to #find is deprecated. Please build a scope and then call #find on it. (called from readingmessage at /home/mateusz/rails4/Bloggers/app/models/message.rb:21)

这是我的方法:

def self.readingmessage(id, reader)
 message = find(id, :conditions => ["sender_id = ? OR recepient_id = ?",    reader,  reader])
if message.read_at.nil? && (message.recepient.id==reader)
  message.read_at = Time.now
  message.save!
end
  message
end

3 个答案:

答案 0 :(得分:4)

您将使用where代替:

message = where("sender_id = ? OR recepient_id = ?", reader, reader).find(id)

答案 1 :(得分:0)

尝试使用arel语法:

message = where('sender_id = ? OR recepient_id = ?', reader, reader).find(id)

值得关注: http://guides.rubyonrails.org/active_record_querying.html

答案 2 :(得分:0)

听起来像我用来构建我的消息系统的同一个教程。不要只是findwhere(它只会检索一个活动的关系对象),请执行以下操作:

self.find(id, :conditions => ["sender_id = ? OR recepient_id = ?", reader, reader])