

railsで画像を選択して保存したいのですが、指定したパスにファイルはできますがバイナリデータの取得がうまくいかないために正しいファイルが作成されません。以下にコードを載せます。

view(画像に関係する部分のみ載せます)

[code]

    <%= form_tag(action: :create, :multipart => true) do %>
      <%= label :book, :画像1 %>
      <%= file_field :book, :image_name1 %>
    <% end %>
    
[/code]

controller

[code]

    def create
        @book = Book.create(create_params)
        image = params[:book][:image_name1]
        File.open("public/books_image/#{@book.image_name1}", "wb"){
            |f| f.write(image.read)
        }
        if @book.save
            redirect_to book_path(@book)
        else
            render action: 'new'
        end
    end
    private
    def create_params
        params.require(:book).permit(:name, :isbn, :author, :lesson, :money, :image_name1, :user_id).merge(:user_id => current_user.id)
    end
    
[/code]

model

[code]

      t.string :image_name1
    
[/code]


CC BY-SA 3.0
2017-10-11T15:07:19.113
38608
2017-10-12T05:09:06.523
24986
question
ruby-on-rails
railsでの画像のバイナリデータの取得

[code]

    params[:book][:image_name1]
    
[/code]

はアップロードされたファイルを参照するためのオブジェクトですので、これをデータベースに保存しても意味ありません。パスとしてそのまま使ってもいけません。

ファイルアップロードのやり方以前に、Railsの基礎の部分からいろいろおかしいので、入門書やhttps://railstutorial.jp
などで一通りのことを勉強されることをお勧めします。Railsチュートリアルには画像のアップロードについても記載があります。


CC BY-SA 3.0
2017-10-12T05:09:06.523
38627
2017-10-12T05:09:06.523
5793
38608
answer