2017-10-06 2 views
-4

Ich versuche eine Beziehung (Follow/Unfold) -Funktion zwischen Benutzern (Gerät) einzurichten. Aber auf meine Benutzer/index Ich erhalte nicht definierte Methode `id‘ für nil: NilClass Fehler, hier sind meine Dateien:undefined Methode `ID 'für Nil: NilClass (Devise - Rails 5)

users.controller.rb

class UsersController < ApplicationController 
    before_action :authenticate_user! 
    before_action :set_user, only:[:show, :index] 

    def index 
     @users = User.where.not(id: current_user.id) 
    end 

    def show 
    end 

    private 

    def set_user 
     @user = User.find_by(username: params[:id]) 
    end 

    def user_params 
     params.require(:user).permit(:name, :username, :description, :location, :user_id) 
    end 
end 

_user.html.erb

<div class="row"> 
     <% @users.each do |user| %> 
      <div class="col-3"> 
       <div class="card user text-center"> 
        <div class="card-body"> 
        <%= link_to user_path(user.name) do %> 
         <%= image_tag(user.user_avatar_url, class: 'rounded', width: '64') %> 
        <% end %> 
        <br> 
        <br> 
        <h5 class="card-title"> 
         <%= link_to user_path(user.name) do %> 
         <small>@<%= user.username %></small><br> 
         <% end %> 
         <%= user.name %> 
        </h5> 
        <p> 
         <%= user.description.first(50) %>... 
        </p> 
        <p> 
         <i class="fa fa-map-marker" aria-hidden="true"></i> <%= user.location %> 
        </p> 

        <p> 
         <%= render 'shared/follow_button' %> 
        </p> 
        </div> 
       </div> 
      </div> 
     <% end %> 
    </div> 

user.rb

class User < ApplicationRecord 

mount_uploader :user_avatar, UserAvatarUploader 
mount_uploader :user_cover, UserCoverUploader 

    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

     has_many :active_relationships, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy 
     has_many :passive_relationships, class_name: "Relationship", foreign_key: "followed_id", dependent: :destroy 

     has_many :following, through: :active_relationships, source: :followed 
     has_many :followers, through: :passive_relationships, source: :follower 

     #helper methods 

     #follow another user 
     def follow(other) 
      active_relationships.create(followed_id: other.id) 
     end 

     #unfollow a user 
     def unfollow(other) 
      active_relationships.find_by(followed_id: other.id).destroy 
     end 

     #is following a user? 
     def following?(other) 
      following.include?(other) 
     end 

end 

Hier ist, was ich für die Folge als Teil bin mit und Taste unfollow, das ist, wo t Der Fehler wird im Browser angezeigt.

_following_button.html.erb

<% if current_user.id != @user.id %> 
    <% if !current_user.following?(@user) %> 
     <%= form_for(current_user.active_relationships.build) do |f| %> 
      <div><%= hidden_field_tag :followed_id, @user.id %></div> 
      <%= f.submit "Connect", class: "btn btn-dark" %> 
     <% end %> 
    <% else %> 
     <%= form_for(current_user.active_relationships.find_by(followed_id: @user.id), html: { method: :delete}) do |f| %> 
      <%= f.submit "Disconnect", class: "btn btn-light" %> 
     <% end %> 
    <% end %> 
<% end %> 
+0

gesendet wird Verwenden Sie 'binding.pry' oder' byebug', um herauszufinden, welche Variable unerwartet "nil" ist, und dann herauszufinden, warum. – meagar

+0

danke @meagar Ich werde es versuchen. @sawa Ich möchte die undefinierte Methode 'id' für nil: NilClass Fehler beheben. – user2796032

Antwort

0

Hier ist Fehler in der Teildatei <%= render 'shared/follow_button' %>

<% if current_user.id != user.id %> 
    <% if !current_user.following?(user) %> 
     <%= form_for(current_user.active_relationships.build) do |f| %> 
      <div><%= hidden_field_tag :followed_id, user.id %></div> 
      <%= f.submit "Connect", class: "btn btn-dark" %> 
     <% end %> 
    <% else %> 
     <%= form_for(current_user.active_relationships.find_by(followed_id: user.id), html: { method: :delete}) do |f| %> 
      <%= f.submit "Disconnect", class: "btn btn-light" %> 
     <% end %> 
    <% end %> 
<% end %> 

statt @user sollte es user sein, wie es von Ihrem Teil _user.html.erb

+0

auch ich würde vorschlagen, dass Sie Einheimischen param mit Ihrer Teildatei wie folgt senden <% = render 'shared/follow_button', Einheimischen: {user: user}%> – Gabbar

+0

Ich bekomme undefined lokale Variable oder Methode 'Benutzer ' für # <# : 0x007fea1d476080> Meinten Sie? @user @users – user2796032

+0

<% = render 'shared/follow_button', lokal: {user: user}%> Verwenden Sie diesen Parameter anstelle des send-Parameters in der lokalen Variablen – Gabbar

Verwandte Themen