【问题标题】:rails, retrieve another user object besides foreign keyrails,检索除外键之外的另一个用户对象
【发布时间】:2012-04-24 14:23:17
【问题描述】:

我有一个用户模型和一个消息模型。我的用户有_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 %>

谢谢

【问题讨论】:

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


    【解决方案1】:

    你需要做的是在message.rb中定义receiver的关系:

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

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

    现在你可以打电话了:

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

    【讨论】:

    • hmmm 它说 #<0x007fda730952b8>
    【解决方案2】:

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

    首先,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 -%>
    

    应该够了。

    【讨论】:

    • 非常感谢!有趣的代码。我会再考虑一下=)非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2016-09-06
    • 2015-02-09
    • 2017-04-22
    • 2010-10-15
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    相关资源
    最近更新 更多