【问题标题】:DEPRECATION WARNING: Passing options to #find is deprecated弃用警告:不推荐将选项传递给#find
【发布时间】:2013-08-20 14:40:46
【问题描述】:

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

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

【问题讨论】:

  • 如果 Dylan 的回答对您有所帮助,请不要忘记点击他回答旁边的小复选标记(就在投票按钮下方)接受它:)
  • 是的....请接受答案。如果答案没有解决您的问题,请分享解决方案。如果还没有解决方案,请告诉我们,我们会努力寻找更好的解决方案。

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


【解决方案1】:

您将改用where

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

【讨论】:

    【解决方案2】:

    试试arel语法:

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

    值得一看: http://guides.rubyonrails.org/active_record_querying.html

    【讨论】:

      【解决方案3】:

      听起来与我用来构建消息传递系统的教程相同。不只是 findwhere(它只会检索一个活动的关系对象),而是这样做:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-16
        • 2019-03-12
        • 2012-05-10
        • 1970-01-01
        • 2012-04-15
        • 1970-01-01
        • 2021-08-09
        • 1970-01-01
        相关资源
        最近更新 更多