多态关联语法中的蜻蜓图像?

Dragonfly images in a polymorphic association syntax?

我有图片模型:

class Picture < ActiveRecord::Base
  belongs_to :imageable, polymorphic: true
  dragonfly_accessor :image
end

然后我有两个不同的模型应该可以有图片:

class Teacher < User 
  has_many :pictures, as: :imageable  
end

class Student < User 
  has_many :pictures, as: :imageable
end

我按照此处的说明设置了 dragonfly,当我只有一个具有图像属性的模型时它就可以工作,但现在我想制作其他模型可以使用的自己的图片模型 have_many 然后它停止了工作:http://markevans.github.io/dragonfly/rails/

在我的 rails 控制台中,我可以执行以下操作:

teacher = Teacher.last
teacher.pictures 

并返回一个空的活动记录代理:

#<ActiveRecord::Associations::CollectionProxy []>

但我做不到:

teacher = Teacher.last
teacher.image
teacher.picture.image
teacher.pictures.image

当我尝试在我的显示视图中显示时:

<%= image_tag @teacher.pictures.thumb('400x200#').url if @teacher.pictures_stored? %>

我明白了

undefined method `pictures_stored?'

即使我删除了 if @scientist.pictures_stored?,我也会收到此错误:undefined method thumb'

我尝试了不同的组合,因为蜻蜓给了我们 dragonfly_accessor :image 在我们的图片模型上。但不确定如何实际引用它。感谢任何帮助。

您正在尝试调用图片列表中的属性。

您需要逐一检查或调用第一张图片:

<% teacher.pictures.each do |pic| %>
    <%= image_tag pic.image %>
<% end %>

或...

image_tag( teacher.pictures.first.image ) if teacher.pictures.any?

希望对您有所帮助

编辑(回应您在下方的评论)

在您的 Teacher 模型中,您可以定义 return 第一张图片的方法:

def first_picture_image
    self.pictures.first.try(:image)
end

如果老师没有与之关联的图片,上述方法将return nil