【问题标题】:Why do I get nil error when I'm trying to retrieve using Active Record?当我尝试使用 Active Record 检索时,为什么会出现 nil 错误?
【发布时间】:2013-08-07 07:18:54
【问题描述】:

我有两个型号,例如UserTracking

Tracking models 下面有这 6 列

  • 身份证
  • user_id
  • target_user_id
  • accessed_at
  • created_at
  • updated_at

models/user.rb

has_many: trackings

models/tracking.rb

belongs_to :user
belongs_to :user, :foreign_key => "target_user_id", :class_name => "User"

然后在controllers/trackings_controller.rb,我这样编码

控制器

@trackings = Tracking.find_by_target_user_id(current_user.id).page(params[:page]).per(10) 

但我得到 nil 错误:(这是为什么呢?
跟踪表中还没有记录。 如何找回?

如果我这样编码,就不会出现错误:(

@trackings = Tracking.page(params[:page]).per(10) 

【问题讨论】:

  • 由于在 tracking 表中还没有记录,因此 Tracking.find_by_target_user_id(current_user.id) 的结果为零,然后您正在执行 nil.page(params[:page])。因此你得到零错误。
  • @Deepika 那么为什么我在编码@trackings = Tracking.page(params[:page]).per(10) 时不会出现 nil 错误呢?
  • 您可以查看错误的回溯,并使用 Better errors gem 很好地调查每个步骤。
  • @ThomasKlemm 谢谢。我已经安装了
  • @MKK 因为如果记录不存在 find_by_something 返回 nil,如果记录不存在 Tracking.page(params[:page]).per(10) 返回数组 []。

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

如果您想搜索 current_user 的跟踪记录

@trackings = Tracking.where(:target_user_id => current_user.id ).page(params[:page]).per(10)

【讨论】:

  • 谢谢!!那么我不能使用find_by_something,那么Active Record的定位是什么??
  • 看,你需要一个活动记录数组, find_by_something 给你一个活动记录。就是这样。
  • 啊啊啊啊,Active Record 只能在一对一关联的情况下工作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 2021-08-10
相关资源
最近更新 更多