私は各ギャラリーに複数の写真を添付できるフォトギャラリーアプリケーションを構築しています。私は、ファイルのアップロードを処理するために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
)を使用しても問題が発生する可能性があるとも考えています。これは正しいです?
ここで何が起こっているのか分かりますか?