我是铁杆新手,原谅。 我有一个现有的数据库架构
create_table "registrations", force: true do |t|
t.string "name", null: false
t.string "product1", null: false
t.string "product_serial1", null: false
t.string "product2", null: false
t.string "product_serial2", null: false
t.string "product3", null: false
t.string "product_serial3", null: false
t.string "product4", null: false
t.string "product_serial4", null: false
end
在UI上,我希望能够搜索序列号,并且需要搜索product1,product2,product3 ......
我的想法是让模型与自身联合,以便所有产品都在自己的行中返回,如
select name, product1 product, serial1 serial from registrations where product1 != ''
union all
select name, product2 product, serial2 serial from registrations where product2 != ''
union all
select name, product3 product, serial3 serial from registrations where product3 != ''
union all
select name, product4 product, serial4 serial from registrations where product4 != ''
Rails可以在模型中做这样的事吗?从控制器开始,如果我注册了searchs.search(),它将默认返回上面的SQL。
答案 0 :(得分:0)
我认为您正在寻找的是以下内容
Registration.where("product_serial1 = ? OR product_serial2 = ? OR product_serial3 = ? OR product_serial4 = ?", search_string, search_string, search_string, search_string)
作为旁注,您可能真的想再看一下您的架构。这些产品序列号看起来像属于产品表,您的注册表应通过中间表连接到许多产品。这article可能有所帮助。
答案 1 :(得分:0)
这可能有所帮助:
Registration.where("product_serial1 like :search or product_serial2 like :search or product_serial3 like :search or product_serial4 like :search", search: "#{params[:search]}")
这将搜索所有序列字段,并仅返回匹配记录。请注意,此示例使用params[:search]
,但这只能替换为变量。