実現したいこと
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/03 05:42
2021/10/03 05:43
2021/10/03 05:46
2021/10/03 06:02