0

Category我的应用程序是由has_many products. 类别和产品都有发布日期。

类别的展示页面显示该类别的产品。

Category_controller 的 show 和 index 动作非常简单(发布的是一个作用域):

def index
    @categories = Category.published
end

def show
    @categories = Category.find(params[:id])
    unless @categories.datepublication <= Time.now
        redirect_to categories_path
    end
end

正如您所看到的,它会显示已发布的类别并将您重定向到类别索引,当您出于自己的兴趣而过于好奇时。

现在,在类别的显示视图中仅显示已发布的产品会很棒。除了视图中的 if 之外,我不知道该怎么做,但在我看来,过滤元素不是视图的工作。过滤嵌套元素的正确 MVC 方法是什么?

4

2 回答 2

1

您可以链接范围,甚至通过关联。从您的示例中,我了解到您的类别有发布日期,但您的产品也有自己的发布日期,对吗?

在这种情况下,您可以在您的产品上设置与您在类别中的范围类似的范围,并以相同的方式使用它,即:

@products = @category.products.published

然后,您是想在控制器中预加载 @products 实例变量还是只在视图中使用 @category.products.published 取决于您。如果应用程序足够简单,我通常只在自己的视图中使用范围查询。

于 2012-10-02T15:45:29.620 回答
1

这是 ORM 的工作(也适用于类别)

 begin
   @category = Category.published.find(params[:id])
 rescue ActiveRecord::RecordNotFound
   redirect_to categories_path unless @category
 end

 @products = @category.products.published
于 2012-10-02T15:45:43.763 回答