Rails,嵌套模型,数组,通过“for”循环迭代

时间:2011-09-09 21:00:41

标签: ruby-on-rails arrays models

我是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; 不起作用。

谢谢!如有必要,我会发布更多代码

0 个答案:

没有答案