こんにちは(^▽^)
現在、railsのdeviceを使っていて他のユーザーページを閲覧したときにその人の
ユーザー名を表示させたいのですが表示できません。
Viewテンプレート <h1><%= user.name %>のプロフィールページ</h1>
controller
class UsersController < ApplicationController #before_action :set_user, only: ["index", "show"] ※before_actionはよくわからないのでコメントアウトしています def index @users = User.all end def show @user = User.find_by(params[:account_name]) end
他にも下記のように書いたりしています
@user = User.find_by(params[:name])
@user = User.find(params[:id])
routes
Rails.application.routes.draw do devise_for :users root 'users#index' resources :users, only: [:show,:index,:edit,:update,:destroy] end
model
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable validates :account_name, uniqueness: true, format: { with: /\A[a-zA-Z\d]+\z/ }, length: { minimum: 3, maximum: 25 } def to_param return self.account_name end end
これで表示させると、
Userのユーザーページです
となります。なぜエラーにならずにこのようになるのでしょうか?
いくつか調べて、下記のコードを使ってみたところ、
@users = User.find_by(id: params[:id])
エラーになりました。
indexページではユーザー一覧を表示させていて、そこからusers/showへ飛ばすことはできています。
テーブル名はusersになります。
カラムについては、nameは漢数字など使えるようにしていて、account_nameは英数字のみです。
<% @users.each do |user| %> <%= link_to(user.name, "/users/#{user.account_name}") %> <% end %>
上記で問題なく動くので、user.nameをusers/showでも使えるものかと思っていましたが使えません。
ただ、
@user = User.find(params[:id])
にして http://localhost:3000/users/9 などでそのページに移動すると、ユーザー名は表示されます。
どなたかお詳しい方ご教授お願い致しますm(__)m
回答1件
あなたの回答
tips
プレビュー