Rails中的内部消息传递

时间:2010-10-10 09:40:23

标签: ruby-on-rails ruby-on-rails-3 messaging

我正在使用本教程来获取在我的网站上运行的内部消息:http://www.novawave.net/public/rails_messaging_tutorial.html

但是,自从我最近升级到Rails 3后,我收到了这个错误:

NoMethodError in MsgController#sendmsg
undefined method `each' for #<String:0xcc8acc0>

应用程序跟踪:

app/models/message.rb:16:in `prepare_copies'
app/controllers/msg_controller.rb:140:in `sendmsg'

消息模型:

class Message < ActiveRecord::Base
  belongs_to :author, :class_name => "User"
  has_many :message_copies
  has_many :recipients, :through => :message_copies
  before_create :prepare_copies

  attr_accessor  :to # array of people to send to
  attr_accessible :subject, :body, :to

  def prepare_copies
    return if to.blank?

    to.each do |recipient|
      recipient = User.find(recipient)
      message_copies.build(:recipient_id => recipient.id, :folder_id => recipient.inbox.id)
    end
  end
end

2 个答案:

答案 0 :(得分:1)

该教程似乎有点陈旧。它使用Rails 2.0(可能还有一些同样古老的Ruby版本)。

您确定to是否包含数组(如attr_accessor评论中所示)?错误消息似乎表明它是一个字符串。

您以前是否在Ruby 1.8下运行此代码(可能是Rails 2.3的版本)?

在Ruby 1.8中,您可以将each发送到String实例,它会(默认情况下)迭代字符串的行(实际上它将在$/上拆分并迭代结果)。< / p>

在Ruby 1.9中,您需要使用each_line来迭代字符串的行。

to.each_line do |recipient|
  …
end

答案 1 :(得分:0)

似乎你现在不再是一个数组而是一个字符串。您的问题semmes来自您的控制器以及您如何在其中定义您的访问者。