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

时间:2013-02-02 18:44:01

标签: ruby ruby-on-rails-3 activerecord where

我的用例很简单:

  

获取类别名称为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'

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

3 个答案:

答案 0 :(得分:3)

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

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

这将显示类别中包含para_name的类别的所有广告。

答案 1 :(得分:0)

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

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

Category.find_by_name

会为您提供一个Category对象,您可以将其与:category

进行比较

修改

对于这种特殊情况,您可以尝试以下操作,因为您可能已使用category_id:integer代替category:reference来创建广告模型。

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

答案 2 :(得分:0)

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