Link 到内容存在的随机页面

Link to random page where content present

我正在使用 Rails 4.

我有两个资源:articlessubarticlessubarticles 嵌套在 articles 中。

我目前有一个随机按钮,可将用户带到随机文章。但是,我希望它只将它们带到存在 subarticle 的文章页面。

解决此问题的最佳方法是什么?我在查找文档时遇到问题。

这是我在articles_controller中的随机方法:

@items = Article.all
@randitem = @items[rand(@items.count)]

并且在视图中:

<%= link_to "Random Page", article_path(@randitem) %>

您是否设置了 counter_cache?如果没有,我会建议你这样做,因为它可以让你以更优雅的方式做你想做的事(代码更少,数据库查询也更少):http://guides.rubyonrails.org/association_basics.html

class Article < ActiveRecord::Base
  # The article table needs then to have a `subarticles_count` field
  has_many :subarticles
end
class Subarticle < ActiveRecord::Base
  belongs_to :article, counter_cache: true
end

然后在你的控制器中,你可以查询 articlessubarticles :

class ArticlesController < ApplicationController
  def index
    @items = Article.includes(:subarticles).where('subarticles_count > 0')
    @randitem = @items[rand(@items.count)]
  end
end

顺便说一下,使用 Ruby sample 方法从集合中随机获取一个项目更简洁:

class ArticlesController < ApplicationController
  def index
    @items = Article.includes(:subarticles).where('subarticles_count > 0')
    @randitem = @items.sample
  end
end