使用 ActiveRecord 的作用域指令返回单个结果

发布于 2024-12-07 00:47:52 字数 411 浏览 0 评论 0原文

我的以下课程在我的单元测试中运行良好,但我觉得它可以更简单。

class License < ActiveRecord::Base
  scope :active, lambda {
    where("active_from <= ?", Date.today).order("version_number DESC")
  }
end

def current_license
  return License.active.first
end

public :current_license

我尝试将 .first 附加到 lambda 子句中,但这会导致错误。

如何告诉scope我只想要第一个结果,从而完全消除方法current_license

I have the following class that works fine in my unit tests but I feel it could be simpler.

class License < ActiveRecord::Base
  scope :active, lambda {
    where("active_from <= ?", Date.today).order("version_number DESC")
  }
end

def current_license
  return License.active.first
end

public :current_license

I have tried appending the .first into the lambda clause but that causes an error.

How do I tell the scope I only want the first result, and thus eliminate the method current_license completely?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤凫 2024-12-14 00:47:52

让它成为一个方法,你可以得到这样的结果:

class License < ActiveRecord::Base

  def self.current_license
    return License.where("active_from <= ?", Date.today).order("version_number DESC").first
  end

end

至于结果的数量,尝试添加一个.limit(1)。有关更多信息,请查看此处

Make it a method, and you can get this:

class License < ActiveRecord::Base

  def self.current_license
    return License.where("active_from <= ?", Date.today).order("version_number DESC").first
  end

end

As for the number of results, try to add a .limit(1). For more info, have a look here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文