🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails

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

Q&A

解決済

1回答

2609閲覧

NoMethodError in Users#indexのエラーが治らない

yukitodesu3

総合スコア10

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails

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

0グッド

0クリップ

投稿2021/03/10 14:48

railsでwebアプリケーションを作っています。
ユーザーの一覧画面に飛ばしたいのですが、
NoMethodError in Users#indexのエラーが出てうまくユーザー情報がページに反映されません。

イメージ説明

index.html.erb

<div class="container"> <div class="row"> <div class="col-3"> <div class="col"> <h1>User info</h1> <table class="table"> <thead> <tr> <th><%= attachment_image_tag @user, :profile_image, :fill, 100, 100, fallback: "no_image.jpg" %></th> <th></th> </tr> </thead> <tbody> <tr> <td>name</td> <td><%= @user.name %></td> </tr> <tr> <td>introduction</td> <td><%= @user.introduction %></td> </tr> </tbody> </table> </div> <div class="col"> <div class="profile-edit"> <%= link_to edit_user_path(@user), method: :get do %> <i class="far fa-user"></i> <% end %> </div> </div> <div class="col"> <h1>New book</h1> <div class="user-show-form"> <%= form_for (@book_new) do |f| %> <div class="show-form-title">Title</div> <div class="show-form-title2"><%= f.text_field :title %></div> <div class="show-form-opinion">Opinion</div> <div class="show-form-opinion2"><%= f.text_area :body %></div> <div class="show-form-submit"><%= f.submit 'Create Book' %></div> <% end %> </div> </div> </div> <div class="col-8"> <div class="user-index-title"> <h1>users</h1> </div> <% @users.each do |user| %> <table class="user-index-all"> <thead> <tr> <th>image</th> <th>name</th> <th></th> </tr> </thead> <tbody> <td><%= @user.name %></td> <td><%= attachment_image_tag @user, :profile_image, :fill, 100, 100, fallback: "no_image.jpg" %></td> <td> <%= link_to user_path(@user.id), method: :get do %> <p>show</p> <% end %> </td> </tbody> </table> <% end %> </div> </div> </div>

users.contolloer.erb

class UsersController < ApplicationController def index @users = User.all @user = current_user.id end def show @user = User.find(params[:id]) @book_new = Book.new @books = @user.books end def new end def edit @user = User.find(params[:id]) end def update @user = User.find(params[:id]) @user.update(user_params) redirect_to user_path(@user.id) end private def user_params params.require(:user).permit(:name, :profile_image, :introduction) end end

試ししたこと
・コードの確認
・エラー文の確認

追加情報
ログインしているユーザーの情報を取りたいため@user = current_user.id
このコードを書いたのですが、コードの書き方としては正しいのでしょうか?

お忙しいとは思いますが、回答よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

お察しのとおり,

@user = current_user.id

がおかしいと思います。
id メソッドの返り値って整数ですよね?
attachment_image_tag メソッドの第一引数って,User オブジェクト(User クラスのインスタンス)を渡してやらないといけないのではないでしょうか。
.id を削除してみると直ったりしませんか?

投稿2021/03/11 15:12

scivola

総合スコア2108

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

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

yukitodesu3

2021/03/11 15:14

回答ありがとうございます。 idをつけると整数が帰ってくるんですね。 勉強になります。 コードを変えて試してみたところ、エラーが解決しました。 ありがとうございます。
scivola

2021/03/11 15:27

モデルオブジェクトの id が何なのか,はきちんと勉強されたほうがいいと思います。 モデルオブジェクトは,データベースに保存されたときには一つのテーブルの一つのレコードに対応するんでしたよね。 そのレコードにいろんなカラムがありますが,そのうちの一つが id カラムです。 id カラムはレコードを一意に識別するために使われる整数型のカラムです。 モデルオブジェクトの id メソッドは,その値を返すためのメソッドです。 ところで,attachment_image_tag は refile gem かなんかのメソッドですよね。私は使ったことがありませんが。 エラーを見ればこのメソッドの問題であることは明らかなので,そういう gem を使っている,という情報も質問に書かれたほうが解決が早かったかと思います。
yukitodesu3

2021/03/12 10:15

なるほど。 ありがとうございます。 もう一度勉強し直します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問