0

我有一个用户模型和一个消息模型。我的用户 has_many 消息和我的消息属于_to 用户。

在我的消息模型上,我有属性:content,:user_id,:to_id。

:user_id 充当外键,也可以被认为是“发送者”,而 :to_id 可以被认为是“接收者”。

在我的消息索引模板中,当我尝试显示所有消息时,我会执行类似...

<%= link_to message_item.user.name, message_item.user %>

该行在显示我收到的消息时效果很好(我的 :to_id 和 :user_id 显示谁向我发送了消息)

但是,当我在我的“已发送”类别下列出消息时,执行上面的代码行将始终显示我的姓名(因为 im :user_id)而不是 :to_id,这会更有意义。

理想情况下,我想要类似的东西

<%= message_item.to_id %>

对于我发送的类别。有没有办法获取我的 :to_id 类别中提到的用户对象?message_item.to_id.name 之类的东西不起作用,因为 message_item.to_id 返回一个整数而不是用户对象。有没有办法得到它?

在尝试显示和链接到发件人时,这是我失败的尝试

    <% if current_user == message_item.user %>
    <%= message_item.to_id %>
    <% else %>
        <%= link_to message_item.user.name, message_item.user %>
    <% end %>

谢谢

4

2 回答 2

2

您需要做的是定义接收者的关系message.rb

belongs_to :to,
  :class_name => 'User',
  :foreign_key => :to_id

我发现如果你把事情称为是这样的事情通常会更清楚to_idto_user_id所以很明显你在谈论用户而不是其他东西。

现在您可以致电:

<%= link_to(message.to.name, message.to) %>
于 2012-04-24T02:59:29.960 回答
1

这很有趣,我今天回答了一个类似的问题。

首先,您必须像这样设置您的MessageUser模型

因此,对于您发送的消息,您可以使用:

<%- current_user.messages.each do |message| -%>
  <%= link_to message.recipient.name, user_path(message.recipient) %>
<%- end -%>

对于收到的消息:

<%- current_user.messages_received.each do |message| -%>
  <%= link_to message.user.name, user_path(message.user) %>
<%- end -%>

这应该足够了。

于 2012-04-24T06:23:17.027 回答