我有一个用户模型和一个消息模型。我的用户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 %>
感谢
答案 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 -%>
这应该足够了。