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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

194閲覧

RailsでUrlgenerationErrorが出る

on_off_on

総合スコア18

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/07/09 11:00

ユーザー登録の時点では、そのままusers_controllerのshowアクションへ飛ぶことができるんですが、
ログイン後にshowアクションへ飛ぶことができません。

どうやらidが取得できずURLがうまく生成されないようです。

gemはsoceryを使っています。

こちらがルーティング

Ruby

1Rails.application.routes.draw do 2 root "sessions#new" 3 4 resources :users, only: %i(new create show) 5 resources :sessions, only: %i(new create destroy) 6end

こちらがusers_controller

Ruby

1class UsersController < ApplicationController 2 def new 3 @user = User.new 4 end 5 6 def show 7 @user = User.find(params[:id]) 8 end 9 10 def create 11 @user = User.new(user_params) 12 if @user.save 13 redirect_to user_path(@user), notice: "Signed up!" 14 else 15 render :new, notice: "Failed to signin" 16 end 17 end 18 19 private 20 21 def user_params 22 params.require(:user).permit(:username, :email, :password, :usertype) 23 end 24end

こちらがsessions_controller

Ruby

1class SessionsController < ApplicationController 2 def new 3 end 4 5 def create 6 user = login(params[:email], params[:password], params[:remember_me]) 7 if user 8 redirect_back_or_to user_path(@user), notice: "Logged in!" 9 else 10 flash.now[:alert] = "Failed to login" 11 render :new 12 end 13 end 14 15 def destroy 16 logout 17 redirect_to root_path, notice: "Logged out!" 18 end 19end 20

おそらくsessions_controllerの記述が間違っているかと思うのですが(他に可能性があれば教えてください)
なぜidが取得できないのか謎です。。。

初歩的な質問で申し訳ありませんが、ご回答よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

def create
user = login(params[:email], params[:password],
params[:remember_me])
if user
redirect_back_or_to user_path(@user), notice: "Logged in!"
else
flash.now[:alert] = "Failed to login"
render :new
end
end

`@user`が定義されてないので`user_path(@user)`の引数が`nil`になってるんだと思います。 `@user`を定義するか、`user`と`@user`が等価なのであればどちらかに統一することで解決しませんか?

投稿2018/07/09 13:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

on_off_on

2018/07/09 22:49

あっ、なるほど.....ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問