Ruby on Rails Shrine Gem在form_for form

时间:2017-12-13 00:04:52

标签: ruby-on-rails shrine

我有一个form_for表单,它使用Shrine gem将图像上传到我的机器上。我在html文件中创建新实例。我正在尝试为新实例设置cached_image_data,因为当我尝试在控制器中创建StructureImage的新实例时出现错误。但我不确定如何写它。我已将插件包含在shrine.rb文件中,还包含ImageUploader类。

require "image_processing/mini_magick"

class ImageUploader < Shrine
    include ImageProcessing::MiniMagick
    plugin :cached_attachment_data
<%= form_for StructureImage.new(audit_structure_id: audit_structure.id),
    url: audit_photos_path(current_audit),
    html: { class: 'js-autosave-form camera gphoto', multipart: true } do |f| %>
    <%=f.hidden_field :image, value: self.cached_image_data %>
    <p style="display: block;">
    <%= f.submit "Upload images",
        class: 'btn btn-primary', data: { disable_with: 'Uploading...' } %>
    </p>
<%- end %>

当我检查错误消息时,为什么它没有创建新的StructureImage,我得到[“图像数据图像数据丢失”]。我不确定我是否在表单中正确设置了图像的值。

我在浏览器中收到此错误

#&lt;#:0x0055e31019d770&gt;

的未定义方法`cached_image_data'

我的shrine.rb文件

require 'shrine'
require 'shrine/storage/file_system'

需要'shrine / storage / google_drive_storage'

Shrine.storages = {
cache: Shrine::Storage::FileSystem.new("public", prefix: 
"uploads/cache"), # temporary
store: Shrine::Storage::FileSystem.new("public", prefix: 
"uploads/store"), # permanent
}

Shrine.plugin :activerecord
Shrine.plugin :cached_attachment_data

现在我尝试使用self.cached_image_data,但是我收到了这个错误。我尝试过无法正常工作的structure_image.cached_iamge_data。我试图在控制器中分配param cached_image_data。这也不起作用。

请帮忙。

1 个答案:

答案 0 :(得分:1)

我不确定您的图像数据应该首先进入chached_image_data。该字段通常在重新提交表单时使用,例如因为其他领域的验证错误。

但是,为了正确呈现表单,您需要参考f.object.cached_image_data。在这种情况下,self可能是引用视图,可能是表单,但绝对不是表单的对象。

通常你会在控制器中创建对象,例如@structure_image = StructureImage.new(...)然后使用form_for @structure_imagef.hidden_field :image, value: @structure_image.cached_image_data创建表单。