2017-12-13 26 views
0

Shrineの宝石を使用して私のマシンに画像をアップロードするform_forフォームがあります。私はhtmlファイルに新しいインスタンスを作成しています。私はコントローラのStructureImageの新しいインスタンスを作成しようとするとエラーが発生するため、新しいインスタンスのcached_image_dataを設定しようとしています。私はそれを書く方法がわかりません。 shrine.rbファイルにプラグインを含め、ImageUploaderクラスも含めました。Ruby on Rails Shrine Gemは、フォームの新しいインスタンスに値を追加します。

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を作成されていない理由のために、エラーメッセージを確認したとき、私は[「画像データの画像データが欠落している」]取得しています。フォームのイメージの値を正しく設定しているかどうかはわかりません。

イムブラウザ

未定義のメソッド `cached_image_dataでこのエラーを取得 '#<のために#:0x0055e31019d770>

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

が必要とマイshrine.rbファイル' 神社/ストレージ/ 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 

今すぐI tri self.cached_image_dataを使用して編集しましたが、そのエラーが発生しています。私は動作しなかったstructure_image.cached_iamge_dataを試しました。私は、コントローラーにパラメータcached_image_dataを割り当てようとしました。それはどちらもうまくいかなかった。

助けてください。

+0

クイックスタートセクション(https://github.com/janko-m/shrine#quick-start)に従っている場合は、問題に遭遇しないことを願っています。あなたはまだ問題に直面している場合、私たちはあなたが立ち往生した時点で知っている。 –

答えて

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で作成します。

関連する問題