Ruby on rails 调用Nil实例方法的ID

Ruby on rails 调用Nil实例方法的ID,ruby-on-rails,ruby,ruby-on-rails-3,object,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Object,Activerecord,我对rails比较陌生,我认为我的问题可能部分是因为我对Ruby类的性质和范围以及它们产生的对象缺乏清晰的理解 我得到以下错误: Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id Rails.root: /Users/rmcnairn/rails/search Application Trace | Framework Trace | Full

我对rails比较陌生,我认为我的问题可能部分是因为我对Ruby类的性质和范围以及它们产生的对象缺乏清晰的理解

我得到以下错误:

Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

Rails.root: /Users/rmcnairn/rails/search
Application Trace | Framework Trace | Full Trace

app/models/photo.rb:17:in `scanner'
app/controllers/suppliers_controller.rb:66:in `block in update'
app/controllers/suppliers_controller.rb:65:in `update'
创建照片记录后。我希望使用该新记录引用关联的记录(结构),并调用该记录上的实例方法(扫描)。 扫描是在Fabric类中定义的

我的记录已设置为 一张照片*有许多*面料:通过面料

这是我的Photo类的快照,以及我试图找到此关联并调用其上的scan方法的尝试

class Photo < ActiveRecord::Base

  has_many :fabrics, :through => :fabric_photos
  has_many :fabric_photos
  after_create :scanner
  accepts_nested_attributes_for :fabrics
  mount_uploader :image, ImageUploader


  def scanner
    if self.fabric == true    #fabric is a boolean column in the Photo table
      self.fabrics.first.scan
   else
    return
   end
  end
end
您是否可以帮助我更多地了解我正在调用的关联对象的性质以及在另一个类中调用该对象的方法的限制(如果有)

我想

self.fabrics.first
正在返回无法使用该方法的内容。已对其调用scan。如果有人能向我解释一下这里的活动记录是怎么产生的,那就太好了

非常感谢

为nil调用id,它会错误地为4——如果您确实想要nil的id,请使用object_id

问题是,
self.fabrics.first
返回nil。在底层数据库中,这意味着Rails生成的sql查询返回null

我会看看控制器代码,或者你用来创建模型的任何东西。您可能没有保存/更新相关模型以连接所有内容。另外,请查看每个表以及其中记录的id,以查看创建了什么和没有创建什么

在数据库中,您应该看到,如果运行rails生成的sql代码(查看日志),那么在fabrics表中就没有满足查询条件的内容

为nil调用id,它会错误地为4——如果您确实想要nil的id,请使用object_id

问题是,
self.fabrics.first
返回nil。在底层数据库中,这意味着Rails生成的sql查询返回null

我会看看控制器代码,或者你用来创建模型的任何东西。您可能没有保存/更新相关模型以连接所有内容。另外,请查看每个表以及其中记录的id,以查看创建了什么和没有创建什么


在数据库中,您应该看到,如果您运行rails生成的sql代码(查看日志),那么在fabrics表中,您没有满足查询条件的内容。

您粘贴了堆栈跟踪,并且其中引用的控制器没有发布。。。始终发布堆栈跟踪中的相关代码以获得更好的答案:)刚刚添加了控制器代码!:)您粘贴了堆栈跟踪,其中引用的控制器未发布。。。始终发布堆栈跟踪中的相关代码以获得更好的答案:)刚刚添加了控制器代码!:)你是对的,看起来问题实际上存在于我的结构控制器中,我开始手动更新和保存每个模型中记录的属性,直到它崩溃。非常感谢!你是对的,看起来问题实际上存在于我的结构控制器中,我开始手动更新和保存每个模型中记录的属性,直到它崩溃。非常感谢!
self.fabrics.first