Link 到内容存在的随机页面
Link to random page where content present
我正在使用 Rails 4.
我有两个资源:articles
和 subarticles
。 subarticles
嵌套在 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
然后在你的控制器中,你可以查询 articles
有 subarticles
:
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
我正在使用 Rails 4.
我有两个资源:articles
和 subarticles
。 subarticles
嵌套在 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
然后在你的控制器中,你可以查询 articles
有 subarticles
:
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