2016-12-30 4 views
0

может любезно посоветуйте мне, как определить @friend в моем контроллере. Я определил @friend как @friend = User.find_by_email(params[:id]), но это не подбирается. если можно было бы любезно объяснить я был бы очень благодареннеопределенный метод `id 'для nil: NilClass - ссылочная ассоциация - рельсы 4

я в настоящее время получаю эту ошибку

undefined method `id' for nil:NilClass 

enter image description here

просмотров/карты/show.html.erb

<div class="current_connection"> 
    <%= friendship_status(@user, @friend) %> 
    </div> 

in my cards_controller.rb

class CardsController < ApplicationController 
    before_action :set_card, only: [:show, :edit, :update, :destroy] 
    before_filter :setup_friends 

    def index 
    ... 
    end 

    def show 
    end 

    def new 
    ... 
    end 

    ... 

    private 
    def set_card 
     @card = Card.find(params[:id]) 
    end 

    def setup_friends 
     @user = User.find(current_user.id) 
     @friend = User.find_by_email(params[:id]) 
    end 

    def card_params 
     params.require(:card).permit(:title, :event_id) 
    end 
end 

frienship_helper.rb

module FriendshipsHelper 
    # Return an appropriate friendship status message. 
    def friendship_status(user, friend) 
    friendship = Friendship.find_by_user_id_and_friend_id(user.id, friend.id) 
    return "#{friend.firstname} is not in your network (yet)" if friendship.nil? 
    case friendship.status 
    when 'requested' 
     "#{friend.firstname} wants to connect with you" 
    when 'pending' 
     "You have requested to connect with #{friend.firstname}" 
    when 'accepted' 
     "#{friend.firstname} is in your network" 
    end 
    end 
end 

маршруты

Rails.application.routes.draw do 

    devise_for :users 
    resources :users do 
    resources :events 
    end 

    resources :events do 
    resources :cards 
    end 
end 

ответ

2

Похоже params[:id] не содержит электронную почту пользователя, он содержит идентификатор карты вместо этого. Пожалуйста, внимательно проверьте свои параметры.

User.find_by_email(params[:id]) вернет nil, если какой-либо пользователь с email == params[:id] не существует.

1

@friend = User.find_by_email (введите здесь параметр электронной почты).

@friend = User.find (params [: id]) возвращает объект User, id которого равен params [: id], если он существует в базе данных.

Вот как использовать find_by: http://apidock.com/rails/v4.0.2/ActiveRecord/FinderMethods/find_by Вот как использовать находку: http://apidock.com/rails/ActiveRecord/FinderMethods/find

Смежные вопросы