蜻蜓图像采用多态关联语法?

时间:2015-08-04 07:02:26

标签: ruby-on-rails image ruby-on-rails-4 carrierwave dragonfly-gem

我有一个图片模型:

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

我按照这里的指示来设置蜻蜓并让它工作时我只有一个带有图像属性的模型,但现在我想制作自己的图片模型,其他模型可以拥有它然后它停止工作:{{3} }

在我的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给了我们dragonfly_accessor :image 在我们的图片模型。但不确定如何实际引用它。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

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

您需要浏览每张照片或拨打第一张照片:

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

...或

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

希望这有帮助

编辑(回复下面的评论)

在您的教师模型中,您可以定义一个返回第一张图片的方法:

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

如果教师没有与之关联的图片,则上述方法将返回nil