我的用例很简单:
获取类别名称为 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)