我有Category
的模型has_many :posts
。
在我的索引页面上,我迭代了类别并输出如下内容:
@categories.each do |category|
link_to category.title, category
category.posts.published.limit(4).each do |post|
link_to post.title, post
end
end
它有效,但是published.limit(4)
不属于那里,我想将它移动到控制器。我该怎么做?
感谢。
答案 0 :(得分:1)
我会在Post上创建一个封装已发布和限制的范围:
class Post < ActiveRecord::Base
scope :highlights, published.limit(4)
end
然后在视图中使用它:
@categories.each do |category|
link_to category.title, category
category.posts.highlights.each do |post|
link_to post.title, post
end
end
如果您希望能够自定义突出显示的长度,可以将范围调用更改为:
scope :highlights lambda { |size| { published.limit(size) } }
然后像:
一样使用它category.posts.highlights(5)
答案 1 :(得分:0)
你可以在控制器中创建一个对象,如:
def index
@published_posts = @categories.collect { |c| c.posts.published.limit(4) }
# but this will be an array of arrays, so let flatten
@published_posts = @published_posts.flatten # array of published posts
end
现在您可以在视图中使用此变量。