Я использую базу данных postgreSQL в своем приложении Rails.Я установил m-to-n отношения между Slots
и Hashtags
.Последнее, что мне нужно, это найти Slots
, которые соответствуют конкретным Hashtags
, указанным для url params
Вот схема.rb
create_table "hashtags", force: :cascade do |t|
t.string "value"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "hashtags_slots", id: false, force: :cascade do |t|
t.bigint "hashtag_id", null: false
t.bigint "slot_id", null: false
t.index ["hashtag_id"], name: "index_hashtags_slots_on_hashtag_id"
t.index ["slot_id"], name: "index_hashtags_slots_on_slot_id"
end
create_table "slots", force: :cascade do |t|
t.string "slot_name"
t.string "file_path"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["slot_name"], name: "index_slots_on_slot_name"
end
Я хочу показать индексслоты, заполненные slots
, которые имеют один из хэштегов, который дается через params[:hashtags]
.Значение Hashtags может содержать 1 или более строк, например:
hashtags = "NetEnt PlayNGo Novomatic"
Это внутри действия index
контроллера Slot
if(params[:slot_name])
@slots = Slot.where(slot_name: params[:slot_name]).paginate(page: params[:page])
elsif(params[:hashtags])
@slots = slotsWithAtLeastOneOfThose(params[:hashtags])
else
@slots = Slot.all.paginate(page: params[:page])
end
Как следует использовать метод
slotsWithAtLeastOneOfThose(hashtags)
slots = ...
return slots
end
похоже, чтобы дать мне все Slots
, которые имеют хотя бы один hashtag
в переменной hashtags
Рассмотрим эти отношения:
Таблица слотов :
id: 1 slot_name: Book of Dead
id: 2 slot_name: Big Win Cat
id: 3 slot_name: Big Bad Wolf
Таблица Hashtag:
id: 1 value: PlayNGo
id: 2 value: Fun
id: 3 value: NetEnt
id: 4 value: MicroGaming
id: 5 value: NotFun
Таблица Hashtags_Slots будет выглядеть так:
slot_id hashtag_id
1 1
1 2
2 2
2 3
2 5
3 4
3 5
А теперь метод
slotsWithAtLeastOneOfThose("PlayNGo NetEnt")
должен дать мне все Slots
с хэштегом PlayNGo
и NetEnt
В данном случае
id: 1 slot_name: Book of Dead
id: 2 slot_name: Big Win Cat