2017-04-05 4 views
0

私は最近、私のRailsアプリケーションで、画像のクラウドストレージをcarrierrwaveと統合してクラウドに変更しました。それは完璧に動作しますが、画像をアップロードした後に写真が空白であるというエラーが表示されるという問題があります。エラーが表示されているにもかかわらず、私は手作業でルートURLを再ロードしました。その時点で写真はすでにアップロードされていました...問題は新しい投稿と編集の投稿のみですが、プロフィール画像を更新していて、私はsimple_formを使って写真をアップロードしました。私は何が欠けている、問題を解決するために私を助けてください。写真をアップロードした後のエラーページ:This is the screenshotキャリアウェーブをキャリアウェーブに変更した後、レールアプリに写真をアップロードした後にエラーが表示されるのはなぜですか?


cloudinaryする変えながら、私は、次の手順に従っています

  1. 私はphoto_uploader.rbcloudinaryを含み、storage :fileを削除config/ディレクトリ
  2. cloudinary.ymlを追加しました。
  3. 最後に、私はimage_tagの前でclタグを追加して作られたcl_image_tag

photo_uploader.rbファイルは次のとおりです。

class PhotoUploader < CarrierWave::Uploader::Base 
    include Cloudinary::CarrierWave 
    # storage :file 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 
end 

マイポストコントローラファイルは次のとおりです。

class PostsController < ApplicationController 
    before_action :authenticate_user!, only: [:new, :create] 
    before_action :is_owner?, only: [:edit, :update, :destroy] 

    def index 
     @posts = Post.all.order('created_at DESC').includes(:user, comments: :user).paginate(:page => params[:page], :per_page => 10) 
    end 

    def new 
     @post = Post.new 
    end 

    def create 
     @post = current_user.posts.create(post_params) 
     if @post.valid? 
     flash[:success] = "Your photo has been successfully posted!" 
     redirect_to root_path 
     else 
     flash[:alert] = "Woops! Looks like there has been an error!" 
     render :new, status: :unprocessable_entity 
     end 
    end 

    def edit 
     @post = Post.find(params[:id]) 
    end 

    def update 
     @post = Post.find(params[:id]) 
     @post.update(post_params) 
     if @post.valid? 
     flash[:success] = "Your post has been successfully updated!" 
     redirect_to root_path 
     else 
     flash[:alert] = "Woops! Looks like there has been an error!" 
     render :edit, status: :unprocessable_entity 
     end 
    end 

    def show 
     @post = Post.find(params[:id]) 
    end 

    def destroy 
     @post = Post.find(params[:id]) 
     @post.destroy 
     flash[:success] = "The post was successfully deleted!" 
     redirect_to root_path 
    end 

    private 

    def is_owner? 
     redirect_to root_path if Post.find(params[:id]).user != current_user 
    end 

    def post_params 
     params.require(:post).permit(:user_id, :photo, :description) 
    end 
end 

主な問題そのelseステートメントcreate modelが実行されているvalidの広告。 どのように私はこの問題を解決することができ、私を助けて...

+0

'@ post'の検証エラーは何ですか?ログ/アラート '@ post.errors.full_messages'? – Rahul

+0

写真をアップロードした後のエラーは: 'Woops!エラーが発生したようです! ' – Achyut

+0

これは検証エラーではなく、ハードコードされたエラーメッセージです。あなたのスクリーンショットを見て、あなたは写真をアップロードするのを忘れましたか? – Rahul

答えて

0

ユーザー負荷(0.4ms)、 "ユーザー" を選択してください。* "ユーザー" WHERE "ユーザー"。 "ID" FROM =? ORDER BY "users"。 "id" ASC LIMIT? [[ "ID"、1]、[ "LIMIT"、1]] (0.1ms)は、 "ポスト"( "写真"、 "説明"、「USER_ID INTOトランザクション SQL(0.3ms)

INSERTを開始します"、" created_at "、" updated_at ")VALUES(?、?、?、?、?)[[" photo "、" Screenshot_from_2017-04-07_19-34-57_fxealu.png "]、[" description "、" asd "]、[" user_id "、1]、[" created_at "、2017-04-07 14:23:14 UTC]、[" updated_at "、2017-04-07 14:23:14 UTC]] SQL( 0.2ms)

UPDATE "posts" SET "photo" = 'image/upload/v1491574997/Screenshot_from_2017-04-07_19-34-57_fxealu.png' "id" =? [[ "ID"、4]] (84.2ms)コミットトランザクションは

あなたは写真の存在を検証するポストをプログラムしました。サーバーログを見て、ポストが検証された後に写真が更新されたようです。

したがって、フラッシュメッセージ。

は、それは次のようになりますあなたのpost.rb

から写真の検証を削除します。

class Post < ApplicationRecord 


belongs_to :user 

has_many :comments, dependent: :destroy 

mount_uploader :photo, PhotoUploader 

delegate :photo, :name, to: :user, prefix: true 

validates :description, :user_id, presence: true 

acts_as_votable 

end 

希望しました。

注:これにより、フォトフィールドが空になります。

+0

兄弟ありがとう!この解決策は私の問題を解決します。しかし、写真を強制的に追加したいのであれば、私は何ができますか? – Achyut

関連する問題