ayaka-k
@ayaka-k (あやか)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

rails device carrierwave 画像が表示できない

Q&A

Closed

(rails初学者) device carrierwave 画像が表示できない

/view/device/registration/profile.html.erbに、
プロフィール画像の表示をしたいのですが、
新たに追加したviewなので、コントローラーへの指示が分からなく、
エラーにはまってしまい困っています。

registration/edit.html.erbや、
users/index.html.erb では、登録した画像を表示できていますので、
コントローラーの指示の問題だと思っています。
データの更新なども正常に動作しています。

=====

*registration/profile_edit.html.rb の実装はこちらを参考にしました。
https://remonote.jp/rails-devise-profile-edit

*carrierwaveのインストールはこちらを参考にしました。
https://qiita.com/shlia/items/d4fdd952b38d4140062d

=====

画像表示をさせたいページ(エラー発生前)

スクリーンショット 2021-01-20 17.09.13.png

発生している問題・エラー

NoMethodError in Users::Registrations#profile_edit

該当するソースコード

/view/device/registration/profile.html.erb
      <h3>プロフィール</h3>

      <% if flash.notice %>
        <p class="notice"><%= flash.notice%></p>
      <%end%>


      <%= form_for current_user, url: {action: 'profile_update'} do |f| %>

        <div class="field">
          <%= f.label :name %><br />
          <%= f.text_field :name %>
        </div>
        <div class="field">
          <%= f.label :img  %><br />
          <%= f.file_field :img %>
        </div>

     # ここから

          <% if @user.img? %>
              <%= image_tag @user.img.url ,class: "icon"%>
          <% else %>
              <%= image_tag "default.png" ,class: "icon" %>
          <% end %>

     # ここまでおかしい

          (以下省略)

該当するソースコード

/registration_controller.rb
# frozen_string_literal: true

class Users::RegistrationsController < 

         (省略)

  def user_update_path_for(resource)
    current_user.assign_attributes(account_update_params)
    if current_user.save
      redirect_to profile_edit_path, notice: 'プロフィールを更新しました'
    else
      render "profile_edit"
    end
  end

  def profile_edit
  end

  def profile_update
    current_user.assign_attributes(account_update_params)
    if current_user.save
      redirect_to profile_edit_path, notice: 'プロフィールを更新しました'
    else
      render "profile_edit"
    end
  end

  protected

  def configure_account_update_params
   devise_parameter_sanitizer.permit(:account_update, keys: [:name])
  end
end

======

自分で試したこと

コントローラーに下記2点を試しましたが、解消できませんでした。

該当するソースコード

/registration_controller.rb
  def profile_edit
  @user = User.find(params[:id])
  end

もしくは、

  def profile_edit
    params.require(:user).permit(:name, :img, :introduction)
  end

発生している問題・エラー

ActionController::ParameterMissing in Users::RegistrationsController#profile_edit
0

1Answer

コントローラーの問題ではなく、
viewで、「@user.img」ではなく、
「current_user.img」としたところ、解決しました!
もっと早く解決できる様に精進します。

0Like

Your answer might help someone💌