0

我的用例很简单:

获取所有类别名称为 params[:category_name] 的广告。


这是我的模型关联:

class Ad < ActiveRecord::Base
  belongs_to :category

  attr_accessible :anonymous, :celular, :name, :precio, :category_id
end

class Category < ActiveRecord::Base
  has_many :ads

  attr_accessible :name
end

这是我的控制器代码:

def by_category
  @ads = Ad.where(:category => params[:category_name])
end

但它没有按预期工作,我得到一个例外:

SQLite3::SQLException:没有这样的列:ads.category: SELECT "ads".* FROM "ads" WHERE "ads"."category" = 'aeronautica'

如何按类别名称过滤广告对象?

4

3 回答 3

3

在您的广告数据库中,您只有一个名为 category_id 的列,因此在广告数据库中搜索类别名称是没有用的。

 Category.find_by_name(params[:category_name]).ads

这将显示参数中具有 category_name 的类别的所有广告。

于 2013-02-02T19:20:39.593 回答
0
Ad.where(:category => Category.find_by_name(params[:category_name]))

params[:category_name]只是一个字符串,而:category是 Category 类型的对象。

Category.find_by_name

会给你一个类别对象,你可以比较:category

编辑:

对于这种特殊情况,您可以尝试以下操作,因为您可能已经使用category_id:integer而不是category:reference创建 Ad 模型。

Ad.where(:category_id => Category.find_by_name(params[:category_name]).id)
于 2013-02-02T19:14:50.817 回答
0
Ad.where(:category => {:name => params[:category_name]})
于 2013-02-02T19:15:58.180 回答