繁体   English   中英

nil:NilClass 的未定义方法“消息”

[英]undefined method `messages' for nil:NilClass

我的第一个项目是 ruby 作为 api,vuejs 作为前端,mongodb 作为 DB,所以我使用 mongoid。

当我调用 controller 的 get 方法时,我的问题出现了。 控制台错误是nil:NilClass 的未定义方法 `messages' ,但是当我尝试puts @message.inspect时,它会获取房间的所有应该获取的消息,所以在这一点上是可以的。 如果在查询完成之前,我不知道错误来自哪里。

message_controller.rb

class MessagesController < ApplicationController
  before_action :authorize_access_request!
  before_action :set_sala

  def index
    @message = @sala.messages
    puts @message.inspect
    render json: @message
  end

  private

    def set_sala
      if params[:sala_id]
        @sala = Sala.find(params[:sala_id])
      end
    end
end

Model 消息

class Message
  include Mongoid::Document
  include Mongoid::Timestamps::Created

  field :body, type: String

  belongs_to :usuario, foreign_key: :usuario_id
  belongs_to :sala, foreign_key: :sala_id

end

萨拉 Model

class Sala
  include Mongoid::Document

  field :nombre, type: String

  belongs_to :usuario
  has_many :messages

end

终端

Started POST "/sala/messages" for 127.0.0.1 at 2019-11-21 15:06:01 +0100
Processing by MessagesController#index as HTML
Parameters: {"sala_id"=>"5dd66a5f575e22274d0a5578", "message"=> {"sala_id"=>"5dd66a5f575e22274d0a5578"}}
MONGODB | [55] localhost:27017 #1 | prueba2_backend_development.find | STARTED | {"find"=>"salas", "filter"=>{"_id"=>BSON::ObjectId('5dd66a5f575e22274d0a5578')}}
MONGODB | [55] localhost:27017 | prueba2_backend_development.find | SUCCEEDED | 0.001s
MONGODB | [56] localhost:27017 #1 | prueba2_backend_development.find | STARTED | {"find"=>"messages", "filter"=>{"sala_id"=>BSON::ObjectId('5dd66a5f575e22274d0a5578')}}
Started GET "/messages" for 127.0.0.1 at 2019-11-21 15:06:01 +0100
MONGODB | [56] localhost:27017 | prueba2_backend_development.find | SUCCEEDED | 0.001s
Processing by MessagesController#index as HTML
[#<Message _id: 5dd69592575e221a9e751c0d, created_at: 2019-11-21 13:48:02 UTC, body: "Mensaje 1", usuario_id: BSON::ObjectId('5dc9b447575e2237b9205299'), sala_id: BSON::ObjectId('5dd66a5f575e22274d0a5578')>, #<Message _id: 5dd695d9575e221a9e751c0e, created_at: 2019-11-21 13:49:13 UTC, body: "Sale aqui ", usuario_id: BSON::ObjectId('5dc9b447575e2237b9205299'), sala_id: BSON::ObjectId('5dd66a5f575e22274d0a5578')>]
Completed 200 OK in 8ms (Views: 0.7ms | MongoDB: 0.0ms | Allocations: 2712)


Completed 500 Internal Server Error in 2ms (MongoDB: 0.0ms | Allocations: 857)

NoMethodError (undefined method `messages' for nil:NilClass):

app/controllers/messages_controller.rb:7:in `index'

您收到错误是因为@sala为 nil,并且您试图在 nil object 上调用messages

如果我们查看您的 controller 代码, @sala设置在set_sala中,在每个操作之前都会调用它。 查看您的逻辑,如果params[:sala_id]不存在,则不会设置@sala

请注意您的GET请求 - Started GET "/messages" for 127.0.0.1 at 2019-11-21 15:06:01 +0100 - 参数sala_id不存在,因此出现错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM