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

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

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

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

Ruby on Rails

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

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Q&A

解決済

2回答

742閲覧

railstutorial8.2.3 レイアウトが反映されない

hai-sai.

総合スコア9

Ruby

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

Ruby on Rails

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

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

0グッド

0クリップ

投稿2019/10/06 11:13

編集2019/10/10 09:24

![問題の画面縮めた画面
前提・実現したいこと

ここに質問の内容を詳しく書いてください。
railstutorialの8.2.3を進めていますが、ユーザーがログインしている状態でのレイアウト画面が表示されません。(ログインはできます)
また、全画面ではなく画面の幅を縮めると、想定しているドロップダウンメニューができます。(添付の画像参照)

発生している問題・エラーメッセージ

エラーメッセージは出ないのですが、下記のようにデバック情報でpermittedがfalseになっています。
また、見本画面にはないparameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccessが出力されています。

--- !ruby/object:ActionController::Parameters parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess controller: users action: show id: '1' permitted: false

該当のソースコード

views <header class="navbar navbar-fixed-top navbar-inverse"> <div class="container"> <%= link_to "sample app", root_path, id: "logo" %> <nav> <ul class="nav navbar-nav navbar-right"> <li><%= link_to "Home", root_path %></li> <li><%= link_to "Help", help_path %></li> <% if logged_in? %> # ログインしているとき <li><%= link_to "Users", '#' %></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown"> Account <b class="caret"></b> </a> <ul class="dropdown-menu"> <li><%= link_to "Profile", current_user %></li> <li><%= link_to "Settings", '#' %></li> <li class="divider"></li> <li> <%= link_to "Log out", logout_path, method: :delete %> </li> </ul> </li> <% else %> # ログインしていないとき <li><%= link_to "Log in", login_path %></li> <% end %> </ul> </nav> </div> </header>
helper module SessionsHelper def log_in(user) session[:user_id] = user.id end def current_user if session[:user_id] @current_user ||= User.find_by(id: session[:user_id]) end end def logged_in? !current_user.nil? end end
users_controller.rb class UsersController < ApplicationController def new @user = User.new end def show @user = User.find(params[:id]) end def create @user = User.new(user_params) if @user.save flash[:success] = "Welcome to the Sample App!" redirect_to @user else render 'new' end end private def user_params params.require(:user).permit(:name, :email, :password, :password_confirmation) end end
routes.rb Rails.application.routes.draw do root 'static_pages#home' get '/help', to: 'static_pages#help' get '/about', to: 'static_pages#about' get '/contact', to: 'static_pages#contact' get '/signup', to: 'users#new' post '/signup', to: 'users#create' get '/login', to: 'sessions#new' post '/login', to: 'sessions#create' delete '/logout', to: 'sessions#destroy' # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html resources :users end
application.js // This is a manifest file that'll be compiled into application.js, which will include all the files // listed below. // // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's // vendor/assets/javascripts directory can be referenced here using a relative path. // // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the // compiled file. JavaScript code in this file should be added after the last require_* statement. // // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details // about supported directives. // //= require rails-ujs //= require jquery //= require bootstrap //= require turbolinks //= require_tree .
sessions_controller.rb class SessionsController < ApplicationController def new end def create user = User.find_by(email: params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) log_in user redirect_to user else flash.now[:danger] = 'Invalid email/password combination' render 'new' end end def destroy end end

試したこと

・jsのライブラリも追加し、scssのファイルもいじってみましたが反映されません。
・新しいユーザーを登録してログインしても反映されませんでした。
・permitted: falseは許可されていないデータ?という意味みたいですが、有効なメールアドレスやパスワードを使っています。

補足情報(FW/ツールのバージョンなど)

Rails 5.1.7

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

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

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

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

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

siruku6

2019/10/06 12:46

次からは、ソースコードは ```と```で囲むようにしましょう。。。 囲まないと、大変見にくくなってしまうため。
guest

回答2

0

自己解決

確認したところ、application.htmlにheaderのコードが残っており、それを削除すると表示されるようになりました。また、bootstrapのプルダウンも反映されなかったのですが、以下のサイトを参考にコードを記載すると動くようになりました。初歩的なミスでした。。
http://takayuki-inoue.hatenablog.com/entry/2018/01/25/120652

投稿2019/10/10 10:33

hai-sai.

総合スコア9

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

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

0

unpermittedであっても、処理結果に問題がなければそのままにしておくこともあります。
ただ、セキュリティ上の脆弱性があるので、「対策した方がいいですよ」とrailsが教えてくれているに過ぎません。

(セキュリティのこともあるし)permittedにしておきたいな、と思うのであれば、controllerで params を permit メソッドに通してやる必要があります。

参考

【Rails】requireとpermitメソッド

controllerへの記載方法がわからなければ、質問にcontrollerも追記するとよいと思います。

疑問

何が反映されないのかが分からないのですが、どういう結果になることを望んでいるのか質問文に明確に書いた方がよいと思います。

書いてありましたね。。。

ユーザーがログインしている状態でのレイアウト画面が表示されません。

これですね。
もっと具体的に言うと、ログインすることができない、ということなのでしょうか、それとも、ログインできるのにレイアウトが変わらないということなのでしょうか?

投稿2019/10/06 12:45

編集2019/10/06 12:51
siruku6

総合スコア1382

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

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

hai-sai.

2019/10/06 13:09

ご返信いただきありがとうございます。 現在の状況としましては、後者のログインできるのにレイアウトが変わらないという状況です。 具体的な内容でなく、申し訳ございません。 また、ソースコードの書き方や、質問の仕方など初心者の私にとっては非常に勉強になります。ありがとうございます。
siruku6

2019/10/06 15:02

いえいえ! ただ、質問文のソースコードは今からでも修正しておいた方が良いと思います、、、 ログインできるのにレイアウトが変わらないということですね。 やはり、controllerファイルと、あとはログイン画面のviewファイル、また可能ならroutes.rbもあった方が、正確な回答が得られると思います
hai-sai.

2019/10/07 10:16

返信が遅れましてすみません。 ご指摘頂いた点改善してみました。ありがとうございます。 ご確認をお願いいたします。
siruku6

2019/10/07 10:19 編集

大変見やすくなりましたね。 平日は私も回答できる時間が少ないので、もしかしたら他の方の方が先に解決策を見つけてくださるかもしれません、、
hai-sai.

2019/10/07 10:27

かしこまりました。 色々教えていただきありがとうございます!自分でも調べて試してみます。
hai-sai.

2019/10/07 12:48

追加してみました。ありがとうございます。
siruku6

2019/10/08 03:36 編集

見てみました。 「レイアウト画面が表示されません」 というのが問題だと思うのですが、表示されないのは、Log inボタンを押した時ですか? また、その時のログが --- !ruby/object:ActionController::Parameters parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess controller: users action: show id: '1' permitted: false だと思いますが、controller名なども記載されていると思うので、ログを丸々掲載してもらえたらと思っています
hai-sai.

2019/10/08 04:27

ありがとうございます。 レイアウトが表示されないのは、ユーザーがログインに成功した時です。 ログインしている状態だと、ドロップダウンメニューが表示されるはずが表示されません。 ログですが、画面上で確認できるのが --- !ruby/object:ActionController::Parameters parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess controller: users action: show id: '1' permitted: false となっています。他にどこかで確認する方法があるのでしょうか?勉強不足で申し訳ございません。。
siruku6

2019/10/08 23:59

>画面上で確認できる これは、webブラウザ上のログですか? そうではなく、(おそらくこちらだと思いますが、)railsのサーバーを起動しているコンソール上のログですか? また、ログインに成功していることはわかっているようなのですが、ログインに成功しているかどうかは何を確認してわかりましたか?
hai-sai.

2019/10/09 09:47

はい、webブラウザ上です。railsのデバック機能で、ローカル環境の場合のみにデバック情報が表示されるようになっています。 ログインに成功したかどうかは、ログインフォームに、データベースに保存されているユーザーを入力すると、名前とマイページが表示されるようになっています。そうでなければエラーメッセージが表示されます。 質問の答えになっていますでしょうか。。ご確認のほどお願いいたします。
siruku6

2019/10/09 14:55 編集

session_helperのcurrent_userメソッド内の、current_userの前にある@マークを消してみたらどうでしょう? @current_userという変数はどこでも使っていなさそうなので。 もうそれくらいしか思いつきませんでした、、、 ちなみにログはもう少し詳しく見れたりするはずです。サーバーを起動しているコンソール上とかも見てもらえると。 今後もそれだけの情報だと、ちょっと物足りないことがあると思います。(ブラウザ上にもっと詳しく表示できるgemもあります)
siruku6

2019/10/09 15:02

もう1個ありました、session_controllerのcreateアクション内の、loginメソッドの前に、view_context.を付けてみるとどうかも見てみると良いかもしれません。 テキストには載ってないっぽいですが、controller内では基本的にはhelperメソッドは呼べなくて、view_contextのように何かしら補足的な記述が必要だったと思います。
hai-sai.

2019/10/10 03:21

ご返答いただきありがとうございます。 上の二つの方法を試してみましたが、反映されませんでした。。 一度やり直すことも視野に入れてもう少し触ってみます。 ログについてもgemなど自分で調べてみます。 お忙しいところ本当にありがとうございます。
hai-sai.

2019/10/10 09:08

追記ですが、画面を全画面ではなく、半分ぐらいに小さくすると、想定しているドロップダウンメニューが出てきました。 これはviewの問題でしょうか?お手すきの際に確認をお願いいたします。
hai-sai.

2019/10/10 10:37

記載している通り、問題解決しました。 初歩的なミスでお時間を頂いてしまい申し訳ございませんでした。 ただ、エンジニアの方にはこのように親身になって一緒に考えてくれる方がいると知り、さらにやる気が出ました。これからも頑張ります!ありがとうございました!
siruku6

2019/10/10 20:01

多少なりともプラスの効果が、あったようでなによりです! これだけ真面目にひとつのエラーに向き合っていけば、必ず技術も身について行くと思います。
hai-sai.

2019/10/11 09:40

ありがとうございます!私も教える側になれるように取り組んでいきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問