我的用例很简单:
获取类别名称为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'
如何按类别名称过滤广告对象?
答案 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]})