我最近参加过Rails课程。我们的任务是在“产品”模型中创建三个命名范围。我做了:
scope :books, where( :category => 'books')
scope :movies, where( :category => 'movies')
scope :music, where( :category => 'music')
当我从命令行将这些称为“Product.books”或“Product.movies”时,我希望看到我的所有产品(书籍或电影)都归还。我得到的只是一个空数组[]。范围定义中的问题(我假设),或者我是如何尝试访问它们的?
答案 0 :(得分:1)
您的语法是正确的。但首先检查您的数据库,可能是您没有与Product.books
或Product.movies
相关的数据。
答案 1 :(得分:1)
你的语法还可以。我通过添加一些书籍和电影来尝试它。当我运行Product.books时,它运行良好并且显示书籍。
所以,你的问题是空数据库,导致空数组。
答案 2 :(得分:1)
Category
自己的模型是否与Product
相关(例如has_many或has_one)?
如果是这种情况,您需要使用joins
Category
例如,请参阅以下代码:
class Product < ActiveRecord::Base
has_one :category
scope :books, joins(:category).where('categories.name' => 'book')
end
class Category < ActiveRecord::Base
belongs_to :product
end
在这个简单示例中,Product
和Category
只有name
个属性作为字符串(在迁移中),Category
也有product_id。