2016-08-30 2 views
0

У меня есть разговор, частичный с маршрутом, являющимся ресурсами: беседы, но когда я пытаюсь сделать это частичным в своей навигационной панели (чтобы перечислить все их активные разговоры), я получаю неопределенную ошибку метода.Оказание частичных действий в любом месте вашего приложения rails

undefined method `author' for nil:NilClass 

Прямо сейчас я делаю <%= render 'conversations/conversation' %>

Есть специальный способ сделать ваши партиалы ВЕЗДЕ на вашем сайте?

EDIT: предоставление кодов

разговоры/_conversation.html.erb

<div> 
    From <strong><%= conversation.author.email %></strong> to 
    <strong><%= conversation.receiver.email %> (<%#= conversation.receiver.online? ? 'online' : 'offline' %>)</strong> 
    <br> 
    <%= link_to 'View conversation', conversation_path(conversation) %> 
    <hr> 
</div> 

макеты/_navigation.html.erb

<%= render 'conversations/conversation' %> 

маршруты

#Chat 
    resources :conversations 
    resources :personal_messages 
    resources :users 
    mount ActionCable.server => '/cable' 

EDIT2:

conversations_controller.rb

class ConversationsController < ApplicationController 
    before_action :set_conversation 
    before_action :check_participating!, except: [:index] 

    def index 
    @conversations = Conversation.participating(current_user).order('updated_at DESC') 
    respond_to do |format| 
     format.html 
     format.js 
    end 
    end 

    def show 
    @personal_message = PersonalMessage.new 
    @conversations = Conversation.participating(current_user) 
    end 

    private 

    def set_conversation 
    @conversation = Conversation.find_by(id: params[:id]) 
    end 

    def check_participating! 
    redirect_to root_path unless @conversation && @conversation.participates?(current_user) 
    end 
end 

ApplicationController

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 

    before_action :authenticate_user! 

end 
+0

Вы могли бы указать код? –

+0

какой метод это говорит не определено? – Bek

+0

сделать частичным: «разговор/разговор», местные жители: {разговор: разговор}? – Mingsheng

ответ

2

Обычный способ сделать это:

render(partial: 'conversations/conversation', object: @conversation) 

Если вы не предоставите ссылку на объект нет никакой привязки данных к местной переменной conversation, и вы получите nil ence error.

+0

Я получаю ту же ошибку с этим – Raidspec

+0

Это предполагает наличие переменной экземпляра '@ conversation', которая определена. Я не знаю, так ли это. Это просто пример. Если у вас нет записанной записи, ни один из этих кодов не будет работать. – tadman

+0

Он определен в контроллере разговоров, но не в контроллере приложений. Возможно, почему? Кажется странным, что вы не сможете отображать частичные места, которые вы хотите на своей странице, не делая много дополнительной работы. – Raidspec

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