Ruby on Rails,使用多态关系通过JSON上传和保存图像

时间:2015-03-05 16:21:02

标签: ruby-on-rails json paperclip

我有2个模特帖子和照片。 Becouse我在其他模型中使用照片我必须使其变成多态(它属于"虚拟"模型)。 这是照片模型:

class Photo < ActiveRecord::Base
  belongs_to :imageable, polymorphic: true
  has_attached_file :photo, :styles => { :large => "800x1000>",:medium => "300x300>", :thumb => "150x150#" }, :default_url => "/images/:style/missing.png"
  validates_attachment_content_type :photo, :content_type => /\Aimage\/.*\Z/
end

我的帖子看起来像这样:

class Post < ActiveRecord::Base
  belongs_to :case
  has_many :photos, as: :imageable
  def as_json(options={})
    super(:include => :photos)
  end
end

在照片表中的数据库中,我有所有的回形针字段以及 imageable_id imageable_type (我在多个模型中使用这些照片)。

要在照片控制器中设置这些字段,请使用:

def set_imageable
  params.each do |name, value|
    if name =~ /(.+)_id$/
      @imageable = $1.classify.constantize.find(value)
    end
  end
  nil
end

当然这是:

 before_action :set_imageable, only: [:create]
 def create
  @photo = Photo.new(photo_params)
  @photo.imageable = @imageable
end

一切正常,我可以将照片附加到多个模型,但现在我仍然坚持使用我的API我希望能够在一次调用中创建帖子和附加图像,您认为它可能吗?< / p>

也许我应该首先上传图片而不是创建帖子并更新imageable_id并输入照片?

1 个答案:

答案 0 :(得分:0)

您是否尝试直接使用关系?

@imageable.photos.create!(photo_params)

我认为我应该工作。它必须创建照片并自动分配其参数如imageable_id和imageable_type