我正在尝试根据嵌套资源的特征编写一个.each语句。我的应用中表之间的关系定义如下:
User has_many Posts
Post belongs_to User
Post belongs_to Category
Category has_many Posts
从给定类别的页面中,我想索引在该类别中拥有帖子的所有用户。实现这一目标的最佳方法是什么?
我一直在尝试以下陈述的各种形式,但没有成功。
<% 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 = User.joins(:post).where(posts: {category_id: @category.id})
在视野中
<% @users.each do |user| %>
<Your html code>
<% end %>
始终将业务逻辑排除在视图之外。建议将该查询作为模型中的范围。
在用户.rb 中
scope :post_users, -> (category_id) {joins(:post).where(posts: {category_id: category_id})}
在控制器中
@post_users = User.post_users(@category.id)
更好的方法是在控制器方法中设置@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 %>