.each 基于嵌套资源的语句

.each Statement Based on Nested Resources

我正在尝试根据嵌套资源的特性编写 .each 语句。我的应用程序中表之间的关系定义如下:

User has_many Posts
Post belongs_to User
Post belongs_to Category
Category has_many Posts

从给定类别的页面中,我想索引所有在该类别中拥有 post 的用户。实现此目标的最佳方法是什么?

我一直在尝试以下语句的各种形式,但没有成功。

<% User.where(user.post.category == @category).each do |category| %>

您可以使用以下查询搜索用户,然后将其列出

<% @users = User.joins(:posts).where('posts.category_id = ?',@category.id) %>
<% @users.each do |user| %>

注意:您可以将上面的第 1 行放在您的控制器中

更好的方法是在控制器方法中设置 @users 或创建任何 辅助方法 以在视图中获取结果

def your_method ## or any other method
  .....
  .....
  @users = User.joins(:posts).where('posts.category_id = ?',@category.id)
end

然后在视图中

#your_view.html.erb

<% @users.each do |user| %>
<% end %>

在控制器中:

@users = User.joins(:post).where(posts: {category_id: @category.id})

可见

<% @users.each do |user| %>
  <Your html code>
<% end %>

永远不要让您的业务逻辑出现在视图中。建议将该查询作为模型中的范围。

在user.rb

scope :post_users, -> (category_id)  {joins(:post).where(posts: {category_id: category_id})}

在控制器中

@post_users = User.post_users(@category.id)