RailsブログアプリでPaperclipを使用してアップロードしようとすると、このエラーが発生します。 「MissingRequiredValidatorError」と表示されているときに何を参照しているのかわからない
Paperclip::Errors::MissingRequiredValidatorError in PostsController#create
Paperclip::Errors::MissingRequiredValidatorError
Extracted source (around line #30):
def create
@post = Post.new(post_params)
これは私のposts_controller.rbです
def update
@post = Post.find(params[:id])
if @post.update(post_params)
redirect_to action: :show, id: @post.id
else
render 'edit'
end
end
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to action: :show, id: @post.id
else
render 'new'
end
end
#...
private
def post_params
params.require(:post).permit(:title, :text, :image)
end
これは私の投稿ヘルパーです
module PostsHelper
def post_params
params.require(:post).permit(:title, :body, :tag_list, :image)
end
end
あなたが私を助けるために追加の資料を補うことができるかどうか私に知らせてください。
Paperclip version 4.0
で始まるすべての添付ファイルには、content_type検証、a file_name検証、または明示的にどちらも持たないことを述べます。
Paperclipは、これを何もしないとPaperclip::Errors::MissingRequiredValidatorError
エラーを発生させます。
あなたの場合、次の行をPost
モデルに追加できます。afterhas_attached_file :image
を指定します
validates_attachment_content_type :image, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"]
-OR-別の方法
validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] }
-OR-さらに別の方法
コンテンツタイプの検証にregexを使用することです。
例:すべての画像形式を検証するには、次のように正規表現を指定できます
validates_attachment_file_name :image, :matches => [/png\Z/, /jpe?g\Z/, /gif\Z/]
何らかの理由でcrazy理由(validになる可能性がありますが、今は考えられません)、追加したくない場合content_type
検証を行い、人々がContent-Typesをスプーフィングし、サーバーに予期しないデータを受信できるようにしてから、次を追加します。
do_not_validate_attachment_file_type :image
注:
上記のcontent_type
/matches
オプション内の要件に従ってMIMEタイプを指定します。始めにいくつかの画像MIMEタイプを指定しました。
参照:
確認する必要がある場合は、Paperclip:Security Validationsを参照してください。 :)
ここで説明されているなりすましの検証にも対処する必要があるかもしれません https://stackoverflow.com/a/23846121
モデルに入れるだけです:
validates_attachment :image, content_type: { content_type: /\Aimage\/.*\Z/ }
モデルにvalidates_attachment_content_typeを追加する必要があります
レール
class User < ActiveRecord::Base
attr_accessible :avatar
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
end
レール4
class User < ActiveRecord::Base
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
end
投稿モデルが次のようになっていることを確認してください...
class Post < ActiveRecord::Base
has_attached_file :photo
validates_attachment_content_type :photo, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"]
end