我是Ruby的新手,并且在创建内部消息传递系统之后遵循这个novawave教程(更早一点)。
http://www.novawave.net/public/rails_messaging_tutorial.html
我目前正在尝试列出已发送的邮件,但我无法正确链接到邮件“收件人”。这是for循环:
<% for message in @messages %>
<tr>
<td><%= message.user.name %></td>
<td><%= message.subject %></td>
<td><%= message.recipients.map(&:user).to_sentence %></td>
我收到“收件人”的“单位化常量”错误我有三个模型:User,Message_Copy和Message。
消息模型
belongs_to用户,
has_many:收件人,:through =&gt; :message_copies
Message_Copy模型 belongs_to消息和收件人
用户模型 has_many其他型号。
我在其他应用程序中注意到了同样的问题。当我遍历数组时,如果主模型“属于”另一个模型,我可以访问该模型。例如,我可以访问User模型,因为Message模型“belongs_to”User模型。因此我可以使用message.user.name。但我无法访问“属于”主模型的模型的属性。所以我无法访问此数组中的Message_Copy模型属性。所以message.recipient.id将返回错误。这个问题可能已经得到了回答,我可能只是犯了一系列容易出错的错误。但我很困惑,并希望有人可以提供帮助,并可能解释我所缺少的内容。如果需要更多信息,请告诉我。谢谢
道歉,这里有更多来自模型的代码: 用户模型
class User < ActiveRecord::Base
attr_accessor :password
attr_accessible :name, :email, :password, :password_confirmation
has_many :sent_messages, :class_name => "Message"
has_many :received_messages, :class_name => "MessageCopy", :foreign_key =>"recipient_id"
has_many :folders
class MessageCopy < ActiveRecord::Base
belongs_to :message
belongs_to :recipient
belongs_to :folder
delegate :user, :created_at, :subject, :body, :recipients, :to => :message
end
class Message < ActiveRecord::Base
belongs_to :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)
@recipient=recipient
message_copies.build(:recipient_id => recipient.id, :folder_id => recipient.inbox.id)
end
end
end
我注意到这有效: &lt;%= message.message_copies%&gt;
而不是上面的代码:
<td><%= message.recipients %></td>
我不明白这一点,因为教程可以使用“收件人”,也因为我可以通过其他方法中的收件人引用Message_Copy模型。
但是 &lt;%= message.message_copies%&gt; 也只是返回一个数组,我不清楚如何才能到达message_copy模型中的特定属性,因为 &lt;%= message.message_copies.content%&gt; 不起作用。
谢谢!如有必要,我会发布更多代码