我对 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),并在该记录上调用实例方法(Scan)。扫描在 Fabric 类中定义。
我的记录已设置为照片*has_many* Fabrics:通过 Fabric_Photos
这是我的 Photo Class 的快照,我试图找到这个关联并在其上调用 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
编辑我添加了相关供应商控制器代码供应商有_很多面料,面料有很多照片
def update
@supplier = Supplier.find(params[:id])
respond_to do |format| # line 65
if @supplier.update_attributes(params[:supplier])
format.html { redirect_to suppliers_url, notice: @supplier.name.to_s + ' was updated' }
format.json { head :no_content }
else
format.html { render action: "edit", notice: @supplier.name.to_s + ' was NOT updated' }
format.json { render json: @supplier.errors, status: :unprocessable_entity }
end
end
end
您是否有可能帮助我更多地了解我正在调用的关联对象的性质和限制,如果有的话,在另一个类中调用它的方法。
我认为
self.fabrics.first
正在返回无法调用 .scan 方法的东西。如果有人能向我解释 Active Record 在这里实际产生了什么,那就太好了。
非常感谢