2011-11-02 26 views
0

我最近在Rails中学习过一门课程。我们的任务是在我们的'产品'模型中创建三个有名望的范围。我已经做了:在rails 3.0中使用命名的作用域

scope :books, where(:category => 'books') 
    scope :movies, where(:category => 'movies') 
    scope :music, where(:category => 'music') 

当我称这些为“Product.books”或在命令行“Product.movi​​es”,我期待看到我所有的产品是书籍或电影的回归。我所得到的是一个空数组[]。问题在范围的定义中(我认为),还是我试图访问它们?

+0

确实Product.where(:category =>“Music”)返回带有类别音乐的产品对象? – prasvin

+0

如果确实如此,我认为范围:音乐,其中(:category =>'Music')在执行Product.music – prasvin

回答

1

您的语法无误。但首先检查您的数据库,可能是您没有与Product.booksProduct.movies相关的数据。

+0

时也应返回对象。这很好理解。我有书和电影,甚至有音乐。刚刚查过一个Product.all,肯定有书籍,音乐和电影(赦免英语很差,很多'ands'在那里)。我认为这可能是问题,我在db中使用了大写的书籍,而在我的作用域中使用了l/c,但它没有任何区别。 – mrwienerdog

1

您的语法正常。我通过添加一些书籍和电影来尝试它。当我运行Product.books时,它运行良好并显示书籍。

所以,你的问题是空的数据库,这是导致空阵列。

+0

那么为什么当我运行'Product.all'时,我得到了所有产品的回报,但Product.books给出了一个空数组?我看到,当我运行Product.all时,有三个类别的书。 – mrwienerdog

+0

尝试Product.first ..在我看来,你有类别 - >书,但在范围内,你正在使用类别 - >书籍 – Abhaya

+0

尝试Product.first,并返回我的第一个产品。它说产品类别:“书籍”。 – mrwienerdog

1

Category它与Product(如has_many或has_one)相关的模型?

如果是这样的话,你需要做的Category

例如一个joins,请看下面的代码:

class Product < ActiveRecord::Base 
    has_one :category 
    scope :books, joins(:category).where('categories.name' => 'book') 
end 

class Category < ActiveRecord::Base 
    belongs_to :product 
end 

在这个简单的例子,无论是ProductCategory只有name属性作为字符串(在迁移中),Category也有product_id。

+0

类别是带有标题,描述等的db表上的一列。它没有它自己的模型。 – mrwienerdog