我有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并输入照片?
答案 0 :(得分:0)
您是否尝试直接使用关系?
@imageable.photos.create!(photo_params)
我认为我应该工作。它必须创建照片并自动分配其参数如imageable_id和imageable_type