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

Selecting Third-tier ActiveRecord_Relation - Rails, ActiveRecord, HABTM

我有三个模型。 UserMessageFilter,关系如下。我怎样才能selectUser.find(*).filters.messages?

用户:

留言:

过滤器:

编辑 1:

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

这是我的操作:

...
def show
  @filtered_messages = ...
end
...

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

<% @filtered_messages.each do |message| %>
...
  <%= message.author%> #author is a column in messages_tables
...
<% end %>

试试这个:

User.find(1).filters.first.messages

听起来您想获取一个用户的所有过滤器的所有消息。那正确吗?试试这个:

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

尝试

Message.joins(:filters).where(filters {user_id: user_id})

但将 user_id 替换为您在应用中确定用户 ID 的方式。

你应该可以做到这一点:

class User
  has_many :filters
  has_and_belongs_to_many :messages
  has_many :filter_messages, through: :filters, class_name: 'Message'
end

然后 @user.filter_messages 应该 return 你想要什么。