rails,检索除外键之外的另一个用户对象

时间:2012-04-24 02:51:42

标签: ruby-on-rails foreign-keys associations

我有一个用户模型和一个消息模型。我的用户has_many消息和我的消息belongs_to user。

在我的消息模型上,我有以下属性: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 %>

感谢

2 个答案:

答案 0 :(得分:2)

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

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

我发现,如果您将to_id之类的内容称为to_user_id,通常会更清楚,因此很清楚您是在谈论用户而不是其他内容。

现在你可以致电:

<%= link_to(message.to.name, message.to) %>

答案 1 :(得分:1)

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

首先,you must set your Message and User models like this

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

<%- 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 -%>

这应该足够了。