如何按类别名称过滤所有广告



我的用例很简单:

获取类别名称为 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: no such列: ads.category: SELECT "ads".* FROM "ads" WHERE "ads"。类别" = '航空'

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

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

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

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

Ad.where(:category => {:name => params[:category_name]})
Ad.where(:category => Category.find_by_name(params[:category_name]))

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

Category.find_by_name

将为您提供一个类别对象,您可以将其与:category进行比较

编辑:

对于这种特殊情况,您可以尝试以下方法,因为您可能使用了category_id:integer而不是category:reference来创建广告模型。

Ad.where(:category_id => Category.find_by_name(params[:category_name]).id)

相关内容

  • 没有找到相关文章

最新更新