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

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

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

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

Q&A

解決済

1回答

404閲覧

Railsで、会員ログアウト状態でもブログ記事一覧が見えるようにしたい

hakoco_12

総合スコア11

Ruby on Rails

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

0グッド

0クリップ

投稿2019/10/07 10:23

編集2019/10/07 10:24

Ruby on rails初心者です。
おそらく初歩的な質問だと思いますが、ご回答いただければ幸いです。

#やっていること
ブログ投稿機能、会員登録機能、管理者権限機能を作っています。
gemは使っていません。

#やりたいこと

会員登録をしていないユーザー → ブログ記事一覧が見える状態、ブログ詳細ページでいいねはつけられない
会員登録をしているが管理者ではないユーザー → ブログ記事一覧が見える状態、いいねをつけられる
管理者であるユーザー → ブログ記事一覧が見える状態、いいねをつけられる、かつブログ記事一覧ページに新規投稿リンクが表示される状態

上記のように、ログインの有無や管理者かどうかによって表示内容を変えたいです。

#エラー内容
会員登録をしていないユーザーがブログ一覧記事ページを見ようとすると、
下記のエラーが出ます。(したがって、いいねがつけられるかどうかまで確認はできていません)

undefined method `admin' for nil:NilClass

会員登録をしていて管理者ではないユーザーであればページは正常に表示されます。

#現在のコード
記事一覧ページのHTML

erb

1 <% if @current_user.admin == true %> 2 <%= link_to 'new', blog_new_path %> 3 <% else %> 4 <p>index</p> 5 <% end %>

application_controller.rb

ruby

1 before_action :set_current_user 2 def set_current_user 3 @current_user = User.find_by(id: session[:user_id]) 4 end

sqliteで select * from sqlite_master; を実行して得られたusersテーブルの情報

sqlite

1table|users|users|9|CREATE TABLE "users"( 2"id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, 3"email" varchar, 4"password" varchar, 5"created_at" datetime NOT NULL, 6"updated_at" datetime NOT NULL, 7"name" varchar, 8"admin" boolean DEFAULT 0 9)

gemを使えば実装できるという情報も若干得ていますが、
現時点でなぜうまくいかないのかの理由がわかればとてもスッキリします。

何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

記事一覧ページのhtml.erbで条件式に間違いがありました。
誤 <% if @current_user.admin == true %>
正 <% if @current_user && @current_user.admin == true %>

Rubyの勉強をやり直します…。

投稿2019/10/07 10:57

hakoco_12

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問