[Ruby on Rails] Suivez la méthode indéfinie de la fonction ʻid'for nil: Résolvez l'erreur NilClass

スクリーンショット 2020-06-20 06.55.37.png

Prémisse / Ce que vous voulez réaliser

Je souhaite implémenter une fonction de suivi. ruby 2.5.1p57 Rails 5.2.4.2

Le message d'erreur suivant s'est produit lors de l'implémentation de la fonction de suivi.

Problèmes / messages d'erreur qui se produisent

error


undefined method `id' for nil:NilClass

Code source correspondant

Table (fichier de migration)

table de relations


class CreateRelationships < ActiveRecord::Migration[5.2]
  def change
    create_table :relationships do |t|
      t.integer :follower_id, foreign_key: true
      t.integer :following_id, foreign_key: true

      t.timestamps null: false
    end

    add_index :relationships, :follower_id
    add_index :relationships, :following_id
    add_index :relationships, [:follower_id, :following_id], unique: true
  end
end

modèle

relationship.rb


class Relationship < ApplicationRecord
  belongs_to :follower, class_name: "User"
  belongs_to :following, class_name: "User"
  validates :follower_id, presence: true
  validates :following_id, presence: true
end

user.rb


class User < ApplicationRecord
  devise  :database_authenticatable, :registerable,
          :recoverable, :rememberable, :validatable
  has_many :posts, dependent: :destroy
  has_many :likes, dependent: :destroy
  has_many :liked_posts, through: :likes, source: :post
  has_many :comments
  
  def already_liked?(post)
    self.likes.exists?(post_id: post.id)
  end

  has_many :following_relationships, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy
  has_many :followings, through: :following_relationships, source: :following
  has_many :follower_relationships, class_name: "Relationship", foreign_key: "following_id", dependent: :destroy
  has_many :followers, through: :follower_relationships, source: :follower

  def following?(user)
    following_relationships.find_by(following_id: user.id)
  end

  def follow!(other_user)
    following_relationships.create!(following_id: user.id)
  end

  def unfollow!(other_user)
    following_relationships.find_by(following_id: user.id).destroy
  end
  
end

routage

routes.rb


Rails.application.routes.draw do
  devise_for :users
  root to: "posts#index"

  resources :posts do
    resources :comments, only: :create
    resources :likes, only: [:create, :destroy]
  end

  resources :users do
    member do
      get :following, :followers
    end
  end

  resources :relationships, only: [:create, :destroy]
end

Vue

ruby:_follow_form.html.haml


- unless current_user?(@user)
  #follow_form
  - if current_user.following?(@user)
    = render 'unfollow'
  - else
    = render 'follow'

manette

users_controller.rb


class UsersController < ApplicationController

  def show
    
  end
  
  def edit
    
  end

  def update
    if current_user.update(user_params)
      redirect_to root_path
    else
      render :edit
    end
  end

  def following
    @user = User.find(id: params[:id])
    binding.pry
    @users = @user.followings
    render 'show_following'
  end

  def followers
    @user = User.find(id: params[:id])
    binding.pry
    @users = @user.followers
    render 'show_follower'
  end

  private

  def user_params
    params.require(:user).permit(:id, :name, :email)
  end

end

Ce que j'ai essayé

-Vérifié si l'association de user.rb (modèle utilisateur) a été configurée correctement. -Vérifié partout pour les fautes d'orthographe dans user.rb (modèle utilisateur) et _follow_form.html.haml (modèle partiel).

Signification du message d'erreur

error


following_relationships.find_by(following_id: user.id)

undefined method `id' for nil:NilClass

-J'ai essayé d'appeler la méthode id pour nil, mais je ne l'ai pas trouvée. ・ L'utilisateur est nul

→ Qu'est-ce qui fait que l'utilisateur devient nul? ?? ??

Cause d'erreur et solution trouvées

Je l'ai résolu en définissant @user comme suit dans l'action show de users_controller.rb.

users_controller.rb


def show
  @user = User.find(params[:id])
end

Avec params [: id], la valeur envoyée avec le chemin est reçue de l'écran avant la transition.

Grâce à cet article, j'ai pu résoudre l'erreur

Je l'ai trouvé sur un site appelé teratail, le sac de sagesse yahoo d'un ingénieur. [Ruby on Rails] Suivez la méthode indéfinie de la fonction ʻid'for nil: le message d'erreur NilClass apparaît

Recommended Posts

[Ruby on Rails] Suivez la méthode indéfinie de la fonction ʻid'for nil: Résolvez l'erreur NilClass
[Ruby on Rails] méthode indéfinie ʻid'for nil: méthode de résolution d'erreur NilClass
[Ruby on Rails] Aucune erreur de méthode méthode non définie `devise_for'error resolution
[Ruby on Rails] méthode indéfinie ʻid'for nil: méthode de résolution d'erreur NilClass
Méthode de résolution d'erreur Spring Boot + PostgreSQL
[Ruby on Rails] Suivez la méthode indéfinie de la fonction ʻid'for nil: Résolvez l'erreur NilClass
[Ruby on Rails] Aucune erreur de méthode méthode non définie `devise_for'error resolution
[Ruby on Rails] Suivez l'implémentation de la fonction: bidirectionnelle
[Ruby on Rails] Fonction de recherche (modèle, formule de sélection de méthode)
[Ruby on Rails] Introduction de la fonction de pagination
[Ruby on Rails] Fonction de sortie CSV
[Ruby on Rails] Implémentation de la fonction de commentaire
[Ruby on Rails] DM, fonction de chat
[Ruby on rails] Implémentation d'une fonction similaire
[Ruby on Rails] Suppression logique (fonction de retrait)
[Ruby on Rails] Aucune erreur de méthode: méthode non définie `t'for # <ActiveRecord :: Migration: 〇〇〇〇> Traitement des erreurs
Paramètres de validation pour la fonction de connexion Ruby on Rails
Implémentation de la fonction de connexion Ruby on Rails (Session)
Les rails suivent la fonction
Ruby on Rails Implémentation de la fonction d'envoi automatique de courrier
Ruby on Rails Comment implémenter la saisie d'adresse automatique
[Ruby on Rails] Fonction de post-édition (mise à jour, suppression)
[Ruby on Rails] Affichage individuel des messages d'erreur
[Ruby on Rails] Communication asynchrone de la fonction de publication, ajax
Résumé des méthodes de mise à jour de plusieurs colonnes [Ruby on Rails]
Implémentation de la fonction de connexion Ruby on Rails (édition de devise)
Ruby on Rails élémentaire
Principes de base de Ruby on Rails
Association Ruby On Rails
Résolution d'erreur sur Heroku
Ruby on Rails Paramètre de la fonction d'envoi automatique des e-mails (avec Gmail)
Recherche d'enregistrements Ruby on Rails, création sinon méthode find_or_create_by
Une note sur la fonction de départ de Ruby on Rails
[Ruby on Rails] Implémenter la fonction de connexion par add_token_to_users avec l'API
Lorsque vous utilisez Slim avec Ruby on Rails, "une variable locale ou une méthode non définie` f'for" s'affiche dans form_with
Record d'apprentissage de Ruby on rails -2020.10.03
Création de portfolio Ruby on Rails
Record d'apprentissage Ruby on rails -2020.10.04
Record d'apprentissage de Ruby on rails -2020.10.09
Record d'apprentissage Ruby on rails-2020.10.07 ②
Record d'apprentissage Ruby on rails-2020.10.07 ①
Annuler la migration de Ruby on Rails
[Ruby] Notes sur la méthode gets
Record d'apprentissage de Ruby on rails -2020.10.06
Résumé de la validation Ruby on Rails
Mémorandum de base Ruby on Rails
Je souhaite ajouter une fonction de navigation avec ruby on rails
[Ruby on Rails] Fonction de publication que seuls les utilisateurs connectés peuvent publier