

Progateのrailsのコースを見ながらアプリを作っています。今プロフィール画像をアップロードしたくてつまづいております。コードはProgateのものをそのまま持ってきてるのですがどうもうまくいきません。  
エラー文も今までに見たことないもので調べてもよくわからないです。ここだけで半日以上止まってしまっています。  
やりたいことは

画像をpublic/user_imagesに保存  
保存された画像をプロフィールページに表示する（ユーザーごとに画像は変更できる）  
です。

どうかご教授くださいませ。

home_controller.rb

[code]

       def update_user
        　@user = User.find_by(id: params[:id])
        　@user.name = params[:name]
        　@user.email = params[:email]
        　if params[:image]
         　 @user.image_name = "#{@user.id}.jpg"
         　 image = params[:image]
         　 File.binwrite("public/user_images/#{@user.image_name}",image.read)
       　 end
       　 if @user.save
          　flash[:notice] = "ユーザー情報を編集しました"
          　redirect_to("/")
        　end
    　　end
    
    　　def profile
      　  @user = User.find_by(id: params[:id])
      　  @post = Post.find_by(id: params[:id])
      　  @likes = Like.where(user_id: @user.id)
    　　end
    
[/code]

routes.rb

[code]

    Rails.application.routes.draw do
    get "home/test" => "home#barbajs"
    
    
      get ":id/edit_profile" => "home#edit_profile"
      get "account/:id/edit" => "home#edit_account"
      post "user/:id/update" => "home#update_user"
      get 'pay/payment'
      devise_for :users
      get "home/:id/likes" => "home#likes"
      post "likes/:post_id/create" => "likes#create"
      post "likes/:post_id/destroy" => "likes#destroy"
    
      root 'home#index'
      get "home/new_fc" => "home#new_fc"
      post "home/create" => "home#create"
      get "home/profile/:id" => "home#profile"
      get ":id/show_fc" => "home#show_fc"
      get ":id/edit_fc" => "home#edit_fc"
      post ":id/update_fc" => "home#update_fc"
      post ":id/fc/destroy" => "home#destroy"
      get ":id/setting" => "home#setting"
      get "pay" => "pay#payment"
      get "home/new_fc_content" => "home#new_fc_content"
      post "home/content_create" => "home#content_create"
    end
    
[/code]

edit_profile.html.erb(プロフィール編集ページ)

[code]

    <h3>プロフィール編集</h3>
    
    <%= form_tag("/user/#{current_user.id}/update", {multipart: true}) do %>
      <p>ユーザー名</p>
      <textarea name="name" class="textbox"><%= current_user.name %></textarea>
      <li>自己紹介変更</li>
      <li>プロフィール写真変更</li>
      <p>画像</p>
      <input name="image" type="file">
      <input type="submit" value="これで完成！" class="btn btn-light-green btn-size-large">
    <% end %>
    
[/code]

profile.html.erb(プロフィールページ)

[code]

    <div class="main">
    <h2><%= @user.name %></h2>
    <img src="<%= "/user_images/#{@user.image_name}" %>">
    <table>
      <tr>
        <th>ファンクラブ総会員数</th>
        <th>入会ファンクラブ数</th>
      </tr>
      <tr>
        <td>11</td>
        <td>20</td>
      </tr>
    </table>
    
[/code]

[![エラー文](https://i.stack.imgur.com/JHYi1.png)](https://i.stack.imgur.com/JHYi1.png)


CC BY-SA 4.0
2018-08-28T12:05:38.923
47886
2018-08-28T16:10:26.937
2018-08-28T15:44:09.817
5288
29898
question
ruby-on-rails ruby 画像
Is a directory @ rb_sysopen というエラー文が出る　Rails5


`Is a directory` は、ファイルを open しようとしたが、それはディレクトリだった、というエラーです。

直接的な原因は、スクリーンショットにあるとおり、open しようとしたファイル名が `public/user_images/` になっていることです。  
つまり、

[code]

     File.binwrite("public/user_images/#{@user.image_name}",image.read)
    
[/code]

この部分で、`@user.image_name` が `""` か `nil` か、そんなところだと思います。

User クラスのコードが質問文にないのでこれ以上はわかりませんが、  
User クラスの `image_name` メソッドや `image_name=`
メソッドが自分で作成したメソッドならば、これらのコードを再確認してみてはいかがでしょう?


CC BY-SA 4.0
2018-08-28T15:47:54.323
47892
2018-08-28T16:10:26.937
2018-08-28T16:10:26.937
5288
5288
47886
answer