首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(未定义方法`receipts_for‘for nil:NilClass - MailBoxer Gem Rails )

(未定义方法`receipts_for‘for nil:NilClass - MailBoxer Gem Rails )
EN

Stack Overflow用户
提问于 2018-05-28 17:58:57
回答 1查看 160关注 0票数 0

我正在使用mailboxer为我的rails应用程序在用户之间构建一个消息传递系统。出于某种原因,我得到了这个错误:

(对于nil:NilClass,未定义的方法`receipts_for‘)

也许是因为我应该在控制器或mailboxer.rb中的某个地方定义‘mailboxer.rb’?我试了几样东西..。但不幸的是,他们都没有成功。

这是我的routes.rb:

代码语言:javascript
复制
Rails.application.routes.draw do
  root   'static_pages#home'
  get    '/help',    to: 'static_pages#help'
  get    '/about',   to: 'static_pages#about'
  get    '/contact', to: 'static_pages#contact'
  get    '/signup',  to: 'users#new'
  get    '/login',   to: 'sessions#new'
  get    'search/index'
  post   '/login',   to: 'sessions#create'
  delete '/logout',  to: 'sessions#destroy'
  resources :users do
    member do
      get :following, :followers
    end
  end
  resources :conversations do
    resources :messages
  end
  resources :account_activations, only: [:edit]
  resources :password_resets,     only: [:new, :create, :edit, :update]
  resources :microposts,          only: [:create, :destroy]
  resources :relationships,       only: [:create, :destroy]
  resources :searches
end

这是我的会话控制器:

代码语言:javascript
复制
class ConversationsController < ApplicationController

  def show
    @conversation = current_user.mailbox.conversation.find(params[:id])
  end


  def new
    @recipients = User.find(params[:user_id])
  end

  def create
    recipient = User.find(params[:user_id])
    receipt = current_user.send_message(recipient, params[:body])
    redirect_to conversation_path(receipt.conversation)
  end

end

这是我的messages_controller:

代码语言:javascript
复制
class MessagesController < ApplicationController
  before_action :set_conversation

  def create
    receipt = current_user.send_message(@conversation, body)
    redirect_to receipt.conversation
  end

  private

  def set_conversation
    @conversation = current_user.mailbox.conversations.find(params[:conversation_id])
  end

end

我正在构建的消息传递系统是一个消息传递系统,在该系统中,“current_user”可以转到应用程序中任何用户的配置文件页面,并通过配置文件页向他/她发送消息。这意味着我在用户模型的show.html.erb中呈现会话模型的show.html.erb。以下是两个视图的代码:

show.html.erb -用户模型:

代码语言:javascript
复制
<% provide(:title, @user.name) %>
<div class="row">
  <aside class="col-md-4">
    <section>
      <h1>
        <%= gravatar_for @user %>
        <%= @user.name %>
      </h1>
    </section>
    <section class="stats">
      <%= render 'shared/stats' %>
    </section>
      <h6>
        <%= @user.gender %>
      </h6>
    <%= render "conversations/conversation" %>
  </aside>
  <div class="col-md-8">
    <%= render 'follow_form' if logged_in? %>
    <% if @user.microposts.any? %>
      <h3>Microposts (<%= @user.microposts.count %>)</h3>
      <ol class="microposts">
        <%= render @microposts %>
      </ol>
      <%= will_paginate @microposts %>
    <% end %>
  </div>
</div>

_conversation.html.erb -显示会话模型的视图。

代码语言:javascript
复制
<% @conversation.receipts_for(current_user).each do |receipt| %>
    <div>
        <%= receipt.message.body %>
    </div>
<% end %>


<%= form_tag conversation_messages_path(@conversation), method: post do  %>
    <div>
        <%= text_area_tag :body %>
    </div>

    <%= submit_tag %>
<% end %>

那么,我如何为我的邮箱定义“receipts_for”方法呢?或者我的代码还有什么问题吗?

任何帮助都将不胜感激!

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-28 22:06:36

我要把@mu太短了说的话记下来.注意整个错误信息是很重要的。“未定义方法receipts_for for nil :NilClass”告诉您,receipts_for方法的接收方为零。@conversation.receipts_for(current_user)看起来是唯一使用receipts_for的地方,所以我将通过确保为@conversation分配现有的ActiveRecord支持的会话对象的值来开始调试。

似乎有太多的事情发生了,所以我不知道如何给你一个快速的解决办法。ConversationsController#show方法中的值分配,@conversation= current_user.mailbox.conversation.find(params[:id])看起来很麻烦。对我来说,这意味着您正在寻找一个基于属于conversationmailboxcurrent_user,这可能是您想要的(在这种情况下,您需要在模型中定义适当的联想 )。

但是,由于链以conversation.find(params[:id])结尾,所以我猜不需要current_user.mailbox。或者,如果您的params实际上没有会话id,那么也许这就是您需要关注的地方。

好消息是,如果您将小虫 (或binding.pry,取决于您已安装的内容)放在show方法的顶部,并且在您的观点中为分部,您可能会知道如何定义show

代码语言:javascript
复制
# In the controller:

  def show
    binding.pry
    @conversation = current_user.mailbox.conversation.find(params[:id])
  end


# in the view
<% binding.pry %>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50571501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档