【问题标题】:Rails messagingRails 消息传递
【发布时间】:2015-05-16 14:05:12
【问题描述】:

我在用户之间创建消息。 从here 获取信息。

然后我去找新消息,我有一个错误。

NoMethodError in MessagesController#new
undefined method `relation_delegate_class' for "Message":String

  def new
    @message = current_user.sent_messages.new
  end

我该如何解决? 谢谢。

消息模型:

class Message < ActiveRecord::Base
  belongs_to :sender, :class_name=>'User', foreign_key: 'sender_id'
  belongs_to :recipient, :class_name=>'User', foreign_key: 'receiver_id'
end

用户模型:

class User < ActiveRecord::Base
  has_many :sent_messages, class: 'Message', foreign_key: 'sender_id'
  has_many :messages, class: 'Message', foreign_key: 'receiver_id' 
end

消息控制器:

class MessagesController < ApplicationController

def new
  @message = current_user.sent_messages.new
end

def create
  @message = current_user.messages.new message_params
  @message.receiver_id = @recipient.id
  @message.save
end

private

def message_params
  params.require(:message).permit(:text, :receiver_id, :sender_id)
end

def set_recipient
 @recipient = User.find(params[:id])
end
end

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    在关联的class 属性中,您应该指定实际类,类似Message 的常量。你也可以使用"Message",但只能使用class_name

    事实上,消息的意思是“你正在用一个字符串做一些意想不到的事情”,解决办法是看看你可能在错误的地方有什么字符串。

    【讨论】:

    • 另外,您可能希望将@message = current_user.sent_messages.new 更改为更具可读性的@message = Message.new(sender: current_user)。换一种方式读起来就像消息已经发送一样。
    • @papirtiger 我建议不要这样做,因为它会深入研究关联的较低级别的细节,如果它的参数发生变化,这可能会停止工作。这只是一个小的命名问题,很容易通过模型的上下文含义来处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 2021-12-16
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多