如何在Rails中搜索类别名称?

时间:2018-03-20 14:20:24

标签: ruby-on-rails ruby

我的工作模式中有一个搜索功能,如果我想搜索工作的标题或描述,它可以正常工作

def self.search(search)

    if search
        where(["title LIKE ? OR description LIKE ?", "%#{search}%" , "%#{search}%"])
    else

    end

end

如何按类别名称搜索?我只能想出按category_id搜索类别并在搜索表单中输入数字。

def self.search(search)

        if search
            where(["title LIKE ? OR category_id LIKE ?", "%#{search}%" , "%#{search}%"])
        else

        end

    end

我的架构

create_table "categories", force: :cascade do |t|
    t.string   "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

create_table "jobs", force: :cascade do |t|
    t.string   "title"
    t.text     "description"
    t.string   "company"
    t.string   "url"
    t.integer  "user_id"
    t.integer  "city_id"
    t.integer  "category_id"
    t.string   "phone"
    t.string   "slug"
  end

我的工作控制器

def search
    @jobs = Job.search(params[:search])
end

1 个答案:

答案 0 :(得分:3)

您需要添加joins声明,以便在查询中包含CATEGORIES表。

此外,如果搜索是一个字符串,则不需要使用字符串注入将其转换为字符串。

def self.search(search)
  joins(:category).where(
    ["categories.name like ? OR title LIKE ? OR description LIKE ?",
     search, search, search]
  )
end

请注意,joins语句使用关系的名称。我假设你在Job类中有这样的一行:

belongs_to :category

在SQL片段中,您需要使用表名称,类别。