Ruby on Rails:CarrierWave-将model.id与其他模型(外键)相关联

时间:2019-11-20 00:14:26

标签: ruby-on-rails ruby carrierwave

我有一个宣传册模型。手册属于一个财产。属性允许上传小册子(pdf文件)。

手册模型:

class Brochure < ApplicationRecord
  belongs_to :property

  mount_uploader :document, BrochuresUploader
end

在我的properties_controller文件和update方法中,属性更新后,它的调用是:

def update
    find_property
    authorize! :update, @property


...
    if @property.update(property_params)
      brochure_service = BrochureService.new(@property)
      brochure_service.add_brochures(params[:property][:brochures], [])
      brochure_service.remove_marked_brochures

      flash[:notice] = "Listing edited successfully"
      redirect_to action: :show
    ...

因此它称为宣传册服务方法:

  def add_brochures(new_brochures, removed_brochures)

    new_brochures&.pop

    removed_brochures = removed_brochures&.split(',')

    new_brochures&.each do |brochure|
      next if removed_brochures.include?(brochure.original_filename)
      @property.brochures.create(document: brochure)
    end
  end

继承BrochureUploader的{​​{1}}具有以下方法:

CarrerWave::Uploader::base

这里的问题是 def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end

上传小册子时,它们会放在一个递增的文件夹名称中,例如model.id 1 2

应该将它们放在基于属性ID的文件夹中,例如3

我不确定如何将该媒体资源ID传递到此上传器中。

如果您需要更多信息,请告诉我

1 个答案:

答案 0 :(得分:0)

我可以像这样访问模型上的属性:

#{model.property.id}

参考手册的模型。小册子property可以访问belongs_to