Rails在帖子显示页面上显示相关或类似的帖子

时间:2018-04-07 04:49:54

标签: ruby-on-rails ruby related-content

我有Postcategory型号

Post
belongs_to :category

Category
has_many :posts

在类别显示页面上,我可以显示属于此类别的所有帖子的列表

<% Post.where(category_id: @category.id).each do |post| %>
....
<% end %>

categories_controller ....

def show
    @category = Category.friendly.find(params[:id])
    @categories = Category.all 
end

如何在帖子的一个显示页面上显示属于同一类别(或共享相同类别ID)的相关帖子列表。谢谢!

3 个答案:

答案 0 :(得分:1)

我认为你可以在 Dim counter, pluscount, minuscount, zerocount As Decimal For counter = 1 To 10 Console.WriteLine("Enter 10 numbers") counter = Console.ReadLine If counter > 0 Then pluscount = pluscount + 1 ElseIf counter < 0 Then minuscount = minuscount + 1 Else zerocount = zerocount + 1 End If counter = counter + 1 Next Console.WriteLine(pluscount & " number/s is/are positive.") Console.WriteLine(minuscount & " number/s is/are negative.") Console.WriteLine(zerocount & " number/s is/are zero") 中执行类似的操作:

posts_controller
顺便说一句,一个好的做法是使用范围而不是def show @post = Post.find(params[:id]) @relative_posts = Post.where(category_id: @post.category_id) end

where

这样你可以在控制器中做到

Post
belongs_to :category
scope :of_category, ->(category) { where(category_id: category) }

答案 1 :(得分:1)

无需使用where条件,因为Post和Category之间已经有关联。所以你可以修改以下代码

Post.where(category_id: @category.id)

as

@category.posts

因此posts_controller.rb中的展示操作应该如下所示

def show
  @post = Post.find(params[:id])
  @relative_posts = @post.category.posts
end

现在您的观点应与

类似
<% @related_posts.each do |post| %>
   // disply details of individual post 
<% end %> 

或者您可以通过将每个循环修改为@related_posts

来避免<% @post.category.posts.each do |post| %>变量

希望这会对你有所帮助。

答案 2 :(得分:0)

我很糟糕,我一直在节目视图中调用'@ post'而不是'post'

控制器应该是:

@related_posts = Post.where(category_id: @post.category_id)

展后视图:

<% @related_posts.each do |post| %>
<%= post.name %>
<% end %>

感谢所有人的贡献