0

私は各ギャラリーに複数の写真を添付できるフォトギャラリーアプリケーションを構築しています。私は、ファイルのアップロードを処理するためにPaperclipを使用しています。"paramが見つからないか、値が空です:"選択したファイルがクリップされていません - Rails

ファイルが選択されていないフォームで[アップロード]をクリックするまで、以下のコードは正常に動作します。私が理解しているように、コントローラがPhotoモデルに引き渡される前に、コントローラの存在、ファイルタイプ、およびファイルサイズの検証を実行するには、コントローラで動かなくなっています。選択されていないファイルを使用して[アップロード]をクリックするとエラーが受信

は次のとおりです。 「paramが存在しないか、値が空である:写真」 抽出されたソースはphoto#photo_paramsラインが強調されています。

ギャラリーモデル:

class Gallery < ActiveRecord::Base 
    belongs_to :user 
    has_many :photos 
end 

写真モデル:

class Photo < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :gallery 

    has_attached_file :photo, 
    s3_permissions: :private 

    validates_attachment :photo, 
    presence: true, 
    content_type: { 
     content_type: [ 
     "image/jpeg", # JPEG/JPG 
     "image/png" # PNG 
     ] }, 
    size: { in: 0..5.megabytes } 
end 

コントローラのアクション(写真#が作成):

def create 
    @photo = Photo.new(photo_params) 
    @photo.gallery_id = @gallery.id 
    @photo.user_id = current_user.id 

    if @photo.save 
     flash[:success] = "Photo successfully saved." 
     redirect_to gallery_path(@photo.gallery) 
    else 
     flash[:error] = "The photo upload failed! Make sure the file you're trying to upload is of a supported type (JPG, JPEG or PNG) and try again." 
     redirect_to gallery_path(@photo.gallery) 
    end 
    end 

強いPARAMS(写真#のphoto_params):

def photo_params 
    params.require(:photo).permit(:photo) 
end 

アップロード形式:

<%= form_for Photo.new, url: gallery_photos_path(@gallery) do |f| %> 
    <%= f.label :photo %> 
    <%= f.file_field :photo %> 

    <%= f.submit "Upload" %> 
    <% end %> 

私は形でModel.newを使用すると、おそらく、ベストプラクティスではありませんが、フォームがギャラリー#ショーのビュー上の一部としてロードされているので、それがあったことを実現私はそれを得ることができる唯一の方法です。

:photoというモデルと実際のPaperclip添付ファイル(:photo)を使用しても問題が発生する可能性があるとも考えています。これは正しいです?

ここで何が起こっているのか分かりますか?

答えて

0

はい私はそれが何か問題を引き起こすかどうかわからないが、photo_params.require(:photo).permit(:photo)のようなコードを持つことが良いとは思えないが、あなたのペーパークリップの添付ファイルの名前を変更する必要があると言いました。

さらに、作成中のelse条件の場合は、最初にroot_pathにリダイレクトしてみてください。あなたの@photoインスタンス変数が実際にPhoto.newであるため、あなたのルートが間違っていると思います。

希望に役立ちます!私はレールの専門家ではありません。乾杯。

0

エラーを見て、私はそれがparamsに「写真」の存在を確認していると思います。 validates_attachment中:あなたが「真の存在を」:追加したとして

は、写真ブロック、あなたはファイルせずにフォームをアップロードする場合のparams

OR

に削除すべきであることを提供しなければならないのプレゼンスを:true 'に制約。

0

はデフ

params.require(:photo).permit(:photo) 

エンド

変更DEF photo_params名前が

かもしれモーダルと混同してattributなってきた属性の名前をphoto_params

params.require(:写真) .permit(:photo_url)

end

関連する問題