【问题标题】:Rails - Check if item is in the last 15 entries of databaseRails - 检查项目是否在数据库的最后 15 个条目中
【发布时间】:2016-01-23 17:13:44
【问题描述】:

我是 Rails 和 SQL 的新手,对这个特定问题有疑问...

我有一个包含用户添加的“项目”的数据库“项目”,包含三列: - 一个是带有项目名称':name'的字符串 - 一个是项目':category_id'的类别的外键 - 最后是一个字符串,包含添加该项目的用户 ':ip' 的 IP 地址。

(还有一个时间戳)。

我想检查当前用户的 IP 是否在当前类别的数据库的最后 15 个条目中。

我一直在努力使用项目控制器中的正确选择器,为正确的 category_id 选择最后 15 个条目的“IP”列的值。我尝试过的一个例子:

@last_fifteen_ip = Item.select("ip").last(15).where(category_id: params[:id])

user_ip = request.remote_ip

if @last_fifteen_ip.include?(user_ip)
  flash[:success] = "User is in the last 15 IP"
end

根本不起作用...可能是因为@last_fifteen_ip 不只选择IP,所以我不能使用.include?正确...

如果你能帮助我,非常感谢。

【问题讨论】:

  • 您是否收到任何错误或您收到错误的记录?
  • @last_fifteen_ip 返回一个数组,但不是我想要的:[#, #, #]
  • 我想你已经找到答案了,试试@miler350 答案。
  • 确保指定明确的order。作为一般经验法则,如果您的 SQL 查询的顺序很重要,请明确指定它。不同的操作系统和数据库组合(如开发与生产环境)将使用不同的默认顺序。因此,如果您想要 created_at 的最后 15 个 IP,那么请执行 Item.where(category_id: params[:id]).order(created_at: :desc).last(15).pluck(:ip)
  • 感谢您的提示!我一定会注意到这一点。

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


【解决方案1】:

您的 @last_fifteen_ip 似乎没有返回您想要的 IP 数组。

试试这个:

@last_fifteen_ip = Item.where(category_id: params[:id]).pluck(:ip).last(15)

这应该返回一个 IP 数组。这将使您的.include? 查询工作。

【讨论】:

  • 完美运行!我根本不知道这种 .pluck 方法。非常感谢!
  • 我要写这个了:)
猜你喜欢
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 2013-05-19
  • 2014-07-15
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多