我试图通过将查询参数传递给控制器来查询多个活动记录模型。在我的tales_controller.rb
中,我具有以下索引方法:
def index
@tales_count = Tale.all.count
if params[:search]
@tales = Tale.joins(:category)
.where('category.title ILIKE ?', "%#{params[:search]}%")
.where(
'title ILIKE :search OR
subtitle ILIKE :search OR
short_description ILIKE :search', search: "%#{params[:search]}%"
)
else
@tales = Tale.all
end
render template: 'tales/index'
end
现在,我似乎无法找出解决该问题的正确方法,因为PG大部分都会抛出错误,说:PG::AmbiguousColumn: ERROR: column reference "title" is ambiguous
。我感觉这是由于我尝试查询Tale-以及Category-Model上的title-field所致。但是我自己无法解决此问题。
通过为索引方法提供正确的查询,我希望能够查询Tale-Model上的几个字段(即title
,subtitle
和short_description
,甚至可能更多) ),以及“类别模型”上的title
字段。
类别模型由故事模型引用。 schema.rb
如下所示:
create_table "tales", force: :cascade do |t|
t.string "public_id"
t.string "title"
t.string "subtitle"
t.string "player_count"
t.string "short_description"
t.datetime "published_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.bigint "category_id"
t.bigint "author_id"
t.index ["author_id"], name: "index_tales_on_author_id"
t.index ["category_id"], name: "index_tales_on_category_id"
end
编辑:嗯,我刚刚意识到,通过查询当前的方式,我希望category.title
和其他任何Tale字段都携带搜索词。坦白说,这不是我想要的。
答案 0 :(得分:1)
Rails中的表名按照约定以复数形式表示。因此,将其更改为
.where('categories.title ILIKE ?', "%#{params[:search]}%")
为了娱乐起见,在Postgres中ILIKE
可以写为
.where('categories.title ~* ?', params[:search])