質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

679閲覧

Couldn't find User with 'id'= を解決したい

YuichiKanno

総合スコア5

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/11/23 01:31

「状況」
現在、deviseを導入したツイッターアプリを作成中であり
ユーザーのプロフィール周りを実装中です。

ユーザーの情報編集のために routes、controller、viewを作成しましたが、
ページに遷移する際にタイトルのエラーが発生しました。

イメージ説明

他のページも参照しましたが、なぜidが見つからないのかが分かりません。
原因及び解決方法を知りたいです。

なお、リンクはユーザー個別ページから飛ぶように設定しています。
以下、該当のソースコードを載せます。

routes.rb

Rails.application.routes.draw do root 'static_pages#home' get 'static_pages/home' devise_for :users, controllers: { registrations: 'users/registrations', sessions: 'users/sessions' } devise_scope :user do # get "users/:id", :to => "users/registrations#detail" get "signup", :to => "users/registrations#new" post "signup", :to => "users/registrations#create" get "users/[:id]/edit", :to => "users/registrations#edit" patch "users", :to => "users/registrations#update" get "login", :to => "users/sessions#new" post "login", :to => "users/sessions#create" delete "logout", :to => "users/sessions#destroy" end resources :users, only: [:index, :show] end

app/controllers/users/registrations_controller.rb

# frozen_string_literal: true class Users::RegistrationsController < Devise::RegistrationsController # before_action :configure_sign_up_params, only: [:create] # before_action :configure_account_update_params, only: [:update] # GET /resource/sign_up def new @user = User.new end # POST /resource def create @user = User.new(user_params) if @user.save log_in @user flash[:success] = "Welcome to the Instagram!" redirect_to current_user else render 'new' end end # GET /resource/edit def edit @user = User.find(params[:id]) end # PUT /resource def update @user = User.find(params[:id]) if @user.update_attributes(user_params) # 更新に成功した場合を扱う。 else render 'edit' end end # DELETE /resource # def destroy # super # end # GET /resource/cancel # Forces the session data which is usually expired after sign # in to be expired now. This is useful if the user wants to # cancel oauth signing in/up in the middle of the process, # removing all OAuth session data. # def cancel # super # end # protected # If you have extra params to permit, append them to the sanitizer. # def configure_sign_up_params # devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute]) # end # If you have extra params to permit, append them to the sanitizer. # def configure_account_update_params # devise_parameter_sanitizer.permit(:account_update, keys: [:attribute]) # end # The path used after sign up. # def after_sign_up_path_for(resource) # super(resource) # end # The path used after sign up for inactive accounts. # def after_inactive_sign_up_path_for(resource) # super(resource) # end def user_params params.require(:user).permit(:name, :user_name, :email, :password, :password_confirmation) end end

app/views/users/shoe.html.erb

<% provide(:title, @user.name) %> <div class="row"> <aside class="col-md-4"> <section class="user_info"> <h1><%= @user.user_name %></h1> <h2><%= @user.name %></h2> <p>自己紹介 : <%= @user.profile %></p> <%= link_to "プロフィール編集", edit_user_registration_path(current_user) %> </section> </aside> </div>

app/views/users/registrations/edit.html.erb

<h2>プロフィール編集 <%= resource_name.to_s.humanize %></h2> <div class="row"> <div class="col-md-6 col-md-offset-3"> <%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> <%= render "devise/shared/error_messages", resource: resource %> <%= f.label :名前 %> <%= f.text_field :name, class: 'form-control' %> <%= f.label :ユーザーネーム %> <%= f.text_field :user_name, class: 'form-control' %> <%= f.label :Webサイト %> <%= f.text_field :web, class: 'form-control' %> <%= f.label :自己紹介 %> <%= f.text_field :profile, class: 'form-control' %> <%= f.label :メールアドレス %><br /> <%= f.email_field :email, autofocus: true, autocomplete: "email" %> <%= f.label :電話番号 %> <%= f.text_field :phonenumber, class: 'form-control' %> <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %> <div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div> <% end %> <%= f.label :パスワード %> <i>(leave blank if you don't want to change it)</i><br /> <%= f.password_field :password, autocomplete: "new-password" %> <% if @minimum_password_length %> <br /> <em><%= @minimum_password_length %> characters minimum</em> <% end %> <%= f.label :password_confirmation %><br /> <%= f.password_field :password_confirmation, autocomplete: "new-password" %> <%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br /> <%= f.password_field :current_password, autocomplete: "current-password" %> <div class="actions"> <%= f.submit "更新する" %> </div> <% end %> </div> </div> <h3>Cancel my account</h3> <p>Unhappy? <%= button_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete %></p> <%= link_to "Back", :back %>

お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

エラー画面の最後を見ると下の方に Paramaters None とあります。
それを呼び出しているのが show の
<%= link_to "プロフィール編集", edit_user_registration_path(current_user) %>
だとおもいます。
この文でparamsがわたらないとすると current_user がnilになっているのではないかと思われます。
current_userを定義してある所を確認してみて下さい

投稿2019/11/23 22:36

winterboum

総合スコア23284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問