画像のようなエラーが解決できず息詰まっています。
エラーの意味はidが受け取れないという解釈で合っているでしょうか。
指定の仕方かルーティングが間違っているのかと思い、引数をuser.followerにしたりといろいろ試してみましたが解決できませんでした。
フォロー機能を実装中でフォロー数、フォロワー数のリンクをクリックすると一覧ページに飛ぶところです。
該当のソースコード
<table class='table'> <tr><%= attachment_image_tag(user, :profile_image, :fill, 100, 100, fallback: "no_image.jpg") %></tr> <tr> <th>name</th> <th><%= user.name %></th> </tr> <tr> <th>introduction</th> <th><%= user.introduction %></th> </tr> <tr> <th>follows</th> <th><%= link_to user.follower.count, user_follower_path(user) %></th> </tr> <tr> <th>followers</th> <th><%= link_to user.followed.count, user_followed_path(user) %></th> </tr> </table> <div class='row'> <% if current_user == user %> <%= link_to '',edit_user_path(user), class: "btn btn-outline-secondary btn-block fas fa-user-cog edit_user_#{user.id}" %> <% else %> <% if current_user.following?(user) %> <%= link_to 'フォローを外す', user_relationships_path(user), method: :delete, class: 'btn btn-info' %> <% else %> <%= link_to 'フォローする', user_relationships_path(user), method: :post, class: 'btn btn-success' %> <% end %> <% end %> </div>
このファイルは部分テンプレートでrenderでindexファイルはcurrent_userを指定、showファイルは@user(@user = @book.user)を指定しています。
関連ファイル
routes.rb
Rails.application.routes.draw do devise_for :users resources :users, only: [:show,:index,:edit,:update] do resource :relationships, only:[:create, :destroy] get 'follower/:id' => 'relationships#follower', as: 'follower' get 'followed/:id' => 'relationships#followed', as: 'followed' end resources :books do resources :book_comments, only: [:create, :destroy] resource :favorites, only: [:create, :destroy] end root 'homes#top' get 'home/about' => 'homes#about', as: 'about' end
user.rb
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_many :books has_many :book_comments, dependent: :destroy has_many :favorites, dependent: :destroy has_many :follower, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy#フォローしている has_many :followed, class_name: "Relationship", foreign_key: "followed_id", dependent: :destroy#フォローされている has_many :follower_user, through: :followed, source: :follower#フォローしている人 has_many :following_user, through: :follower, source: :followed#フォローされている人 #フォローする def follow(user_id) follower.create(followed_id: user_id) end #フォローを外す def unfollow(user_id) follower.find_by(followed_id: user_id).destroy end #既にフォローしているかの確認 def following?(user) following_user.include?(user) end attachment :profile_image, destroy: false validates :name, length: {maximum: 20, minimum: 2}, uniqueness: true validates :introduction, length: {maximum: 50} end
user_controller.rb
class UsersController < ApplicationController before_action :ensure_correct_user, only: [:update] def show @user = User.find(params[:id]) @books = @user.books @book = Book.new end def index @users = User.all @book = Book.new end def edit @user = User.find(params[:id]) if @user.id != current_user.id redirect_to user_path(current_user) end end def update if @user.update(user_params) redirect_to user_path(@user), notice: "You have updated user successfully." else render "edit" end end private def user_params params.require(:user).permit(:name, :introduction, :profile_image) end def ensure_correct_user @user = User.find(params[:id]) unless @user == current_user redirect_to user_path(current_user) end end end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/03 03:32 編集
2021/01/03 03:39 編集
2021/01/03 03:55
2021/01/03 04:01 編集
2021/01/03 04:10
2021/01/03 04:14
2021/01/03 04:48