【发布时间】:2018-09-18 16:30:11
【问题描述】:
我正在尝试访问 Rails 部分中的一些嵌套属性;让我解释一下我的问题:
我根据我在另一个问题中提到的 dana mulder 的教程编写了一个简单的消息服务。 user has_many conversations 和 conversation has_many messages。每个对话都有一个收件人和一个发件人,每条消息都有一个布尔值read,默认设置为false。
我要做的是编写一个简单的函数,它遍历用户在他参与的对话中收到的每条消息,检查用户在对话中收到的最后一条消息是否已读取 == true 和 不自己发送在我的应用导航中的“消息”链接旁边显示一个小旋钮。
我基本上要检查的是(多行以提高可读性):
<%= if current_user.conversations.all.messages.last.user_id != current_user.id && current_user.conversations.all.messages.last.read == false %>
Message link with bubble beside it
<% else %>
Message link
<% end %>
这种语法不起作用.. 如何遍历用户参与的每个对话,检查每个对话的最后一条消息是否由该用户编写,如果不是,则检查它是否已经阅读?
当Conversation.last.messages.last.content 之类的东西在工作时,
current_user.conversations.all.messages.last.content 不是......我觉得 Rails 模型的可访问性如何工作有点令人困惑。
提前致谢!我希望我解释得足够好。
最好的问候
【问题讨论】:
-
每个对话是否有单独的消息链接?还是只针对所有对话?
-
我猜你需要遍历每个对话。 “conversations.all.messages”将不起作用,因为“conversations.all”将返回一个活动的关系对象。 (附带说明,如果有很多对话,应避免使用“all”。它会将所有对话加载到内存中,导致内存使用率高)
标签: ruby-on-rails ruby model nested-attributes