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 %>
gesendet wird Verwenden Sie 'binding.pry' oder' byebug', um herauszufinden, welche Variable unerwartet "nil" ist, und dann herauszufinden, warum. – meagar
danke @meagar Ich werde es versuchen. @sawa Ich möchte die undefinierte Methode 'id' für nil: NilClass Fehler beheben. – user2796032