选择第三层 ActiveRecord_Relation - Rails、ActiveRecord、HABTM
Selecting Third-tier ActiveRecord_Relation - Rails, ActiveRecord, HABTM
我有三个模型。 User
、Message
和Filter
,关系如下。我怎样才能selectUser.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
的实例变量,并希望在我的视图中遍历它。
这是我的操作:
...
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 你想要什么。
我有三个模型。 User
、Message
和Filter
,关系如下。我怎样才能selectUser.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
的实例变量,并希望在我的视图中遍历它。
这是我的操作:
...
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 你想要什么。