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

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

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

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Ruby on Rails

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

Q&A

解決済

1回答

614閲覧

ActionController::UrlGenerationError in Users#showというエラーが出るが、解決策が分からない。

yasshun1229

総合スコア8

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Ruby on Rails

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

0グッド

0クリップ

投稿2021/10/03 05:14

編集2021/10/03 05:41

実現したいこと

Ruby on Railsで、MicropostsというTwitterのようなWebアプリを作っています。
現在、rails sを実行してプレビューしたら、下記のようなエラーが発生しています。
ご教授お願いします。

エラー内容

イメージ説明
show.html.erbの4つめのnav-itemのURLのcontrollerが違います。

該当のソースコード

microposts2/app/views/users/show.html.erb

Ruby

1<div class="row"> 2 <aside class="col-sm-4"> 3 <div class="card"> 4 <div class="card-header"> 5 <h3 class="card-title"><%= @user.name %></h3> 6 </div> 7 <div class="card-body"> 8 <img class="rounded img-fluid" src="<%= gravatar_url(@user, { size: 500 }) %>" alt=""> 9 </div> 10 </div> 11 <%= render 'relationships/follow_button', user: @user %> 12 <%= render "favorites/favorite_button", micropost: @micropost %> 13 </aside> 14 <div class="col-sm-8"> 15 <ul class="nav nav-tabs nav-justified mb-3"> 16 <li class="nav-item"><a href="<%= user_path(@user) %>" class="nav-link <%= 'active' if current_page?(user_path(@user)) %>">Microposts <span class="badge bg-secondary"><%= @count_microposts %></span></a></li> 17 <li class="nav-item"><a href="<%= followings_user_path(@user) %>" class="nav-link <%= 'active' if current_page?(followings_user_path(@user)) %>">Followings <span class="badge bg-secondary"><%= @count_followings %></span></a></li> 18 <li class="nav-item"><a href="<%= followers_user_path(@user) %>" class="nav-link <%= 'active' if current_page?(followers_user_path(@user)) %>">Followers <span class="badge bg-secondary"><%= @count_followers %></span></a></li> 19 <li class="nav-item"><a href="<%= favoritings_micropost_path(@micropost) %>" class="nav-link <%= "active" if current_page?(favoritings_micropost_path(@micropost)) %>">Favoritings <span class="badge bg-secondary"></span></a></li> 20 </ul> 21 <%= render 'microposts/microposts', microposts: @microposts %> 22 </div> 23</div>

他のコード

config.routes.rb

Ruby

1Rails.application.routes.draw do 2 root to: 'toppages#index' 3 4 get 'login', to: 'sessions#new' 5 post 'login', to: 'sessions#create' 6 delete 'logout', to: 'sessions#destroy' 7 8 get 'signup', to: 'users#new' 9 # フォロー中のユーザとフォローされているユーザ一覧を表示するページ作成 10 resources :users, only: [:index, :show, :create] do 11 member do # idが含まれるURLの生成(ユーザの特定が必要) 12 get :followings 13 get :followers 14 end 15 end 16 17 18 # お気に入り登録しているMicropostを一覧表示するページ作成 19 get "signup", to: "user#new" 20 resources :microposts, only: [:index, :show, :create] do 21 member do 22 get :favoritings 23 end 24 end 25 26 resources :microposts, only: [:create, :destroy] 27 resources :relationships, only: [:create, :destroy] # フォロー/アンフォローできるようにするルーティング 28 resources :favorites, only: [:create, :destroy] # Micropostをお気に入りできるようにするルーティング 29end

views/favorites/_favorite_button.html.erb

Ruby

1 <% if current_user.favoriting?(micropost) %> 2 <%= form_with(model: current_user.favorites.find_by(favorite_id: micropost_id), method: :delete) do |f| %> 3 <%= hidden_field_tag :favorite_id, :micropost_id %> 4 <%= f.submit "Unfavorite", class: "btn btn-warning w-100" %> 5 <% end %> 6 <% else %> 7 <%= form_with(model: current_user.favorites.build) do |f| %> 8 <%= hidden_field_tag :favorite_id, :micropost_id %> 9 <%= f.submit "Favorite", class: "btn btn-success w-100" %> 10 <% end %> 11 <% end %>

app/controller/favorites_controller.rb

Ruby

1class FavoritesController < ApplicationController 2 before_action :require_user_logged_in 3 4 def create 5 micropost = Micropost.find(params[:favorite_id]) 6 current_micropost.favorite(micropost) 7 falsh[:success] = "Micropostをお気に入り登録しました" 8 redirect_to user 9 end 10 11 def destroy 12 micropost = Micropost.find(params[:favorite_id]) 13 current_micropost.unfavorite(micropost) 14 flash[:success] = "Micropostのお気に入り登録を解除しました" 15 redirect_to user 16 end 17end

##追加のソースコード
app/controllers/users.controller.rb

Ruby

1class UsersController < ApplicationController 2 before_action :require_user_logged_in, only: [:index, :show, :followings, :followers] 3 4 def index 5 @pagy, @users = pagy(User.order(id: :desc), items: 25) 6 end 7 8 def show 9 @user = User.find(params[:id]) 10 @pagy, @microposts = pagy(@user.microposts.order(id: :desc)) 11 counts(@user) 12 end 13 14 def new 15 @user = User.new 16 end 17 18 def create 19 @user = User.new(user_params) 20 21 if @user.save 22 flash[:success] = 'ユーザを登録しました。' 23 redirect_to @user 24 else 25 flash.now[:danger] = 'ユーザの登録に失敗しました。' 26 render :new 27 end 28 end 29 30 def destroy # 教材にはないですが、ユーザをどうしても削除したいことがあるので記載しました。 31 @user = User.find(params[:id]) 32 @user.destroy 33 end 34 35 def followings 36 @user = User.find(params[:id]) 37 @pagy, @followings = pagy(@user.followings) 38 counts(@user) 39 end 40 41 def followers 42 @user = User.find(params[:id]) 43 @pagy, @followers = pagy(@user.followers) 44 counts(@user) 45 end 46 47 private 48 49 def user_params 50 params.require(:user).permit(:name, :email, :password, :password_confirmation) 51 end 52end

開発環境

・AWS
・Ruby 3.0.0
・Rails 6.1.3.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

UsersControllerのcodeがないので、、、
ですが症状からして、 @micropost が定義されていないか、該当するものがなく nil になっているか、であると思われます

投稿2021/10/03 05:38

winterboum

総合スコア23567

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

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

yasshun1229

2021/10/03 05:42

ただいま、UsersControllerのコードを追記しました。
winterboum

2021/10/03 05:43

やっぱ、@micropost が定義されていないですね
yasshun1229

2021/10/03 05:46

UsersControllerに@micropostを定義することが解決策ということですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問