首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择第三层ActiveRecord_Relation - Rails、ActiveRecord、HABTM

选择第三层ActiveRecord_Relation - Rails、ActiveRecord、HABTM
EN

Stack Overflow用户
提问于 2015-03-10 02:29:01
回答 4查看 89关注 0票数 1

我有三个模特。UserMessageFilter,如下所示。如何选择User.find(*).filters.messages

用户:

  • has_many :filters
  • has_and_belongs_to_many :messages

消息:

  • has_and_belongs_to_many :users
  • has_and_belongs_to_many :filters

滤波器:

  • belongs_to :user
  • has_and_belongs_to_many :messages

编辑1:

我将结果分配给一个名为@filtered_messages的实例变量,并希望在我的视图中迭代它。

以下是我的行动:

代码语言:javascript
运行
复制
...
def show
  @filtered_messages = ...
end
...

以下是我的观点部分(摘要):

代码语言:javascript
运行
复制
<% @filtered_messages.each do |message| %>
...
  <%= message.author%> #author is a column in messages_tables
...
<% end %>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-03-10 02:39:59

听起来,您想要获取一个用户的所有过滤器的所有消息。是那么回事吗?试试这个:

User.find(*).filters.includes(:messages).map { |filter| filter.messages }.flatten

票数 1
EN

Stack Overflow用户

发布于 2015-03-10 03:28:07

你应该能够做到这一点:

代码语言:javascript
运行
复制
class User
  has_many :filters
  has_and_belongs_to_many :messages
  has_many :filter_messages, through: :filters, class_name: 'Message'
end

然后@user.filter_messages应该返回您想要的东西。

票数 2
EN

Stack Overflow用户

发布于 2015-03-10 02:36:33

试试这个:

代码语言:javascript
运行
复制
User.find(1).filters.first.messages
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28955178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档