2015-12-23 2 views
0

Только что начал кодирование в Ruby on Rails и удалось создать базовую функциональность CRUD для моего приложения.Создание фильтра для активной записи в рельсах

Я могу также перечислить их все. Теперь я хотел бы создать фильтр для взаимодействия с пользователем.

Database Schema 
create_table "nades", force: :cascade do |t| 
    t.string "title" 
    t.integer "grenade" 
    t.text  "description" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "map_id" 
end 

«граната» может иметь значение от 1-4, что соответствует определенной гранатой:

[[1,"smoke"], [2,"flash"], [3,"molotov"], [4,"he-grande"]

Теперь я пытаюсь создать фильтр с 4-мя кнопками на панели , Где вы можете включить/выключить каждый наде, чтобы показать или скрыть их в результатах.

[x]Smoke [ ]Flash [ ]Moltov [x]HE

Это должно возвращать только Подствол where grenade = [1,4]

После некоторого чтения он выглядит как область действия было бы неплохо использовать для управления этим. Однако я не уверен, как заставить его работать, как я хочу.

думал сделать что-то вроде:

scope :by_nade, -> grenade { where(grenade: grenade) if status.grenade? }

Однако это только позволяет мне получить 1 определенный тип Нади из базы данных. ли Возможное отправить несколько параметров, как:

http://localhost:3000/nades/?by_nade=1,2 ??

Или это лучшее решение моей проблемы?

ответ

0

Изучите форму с массивом опций (например, here). Это позволит вам получить несколько значений для конкретного типа гранаты.

Ваша область применения будет работать либо с одним идентификатором , либо с массивом идентификаторов и с использованием подхода с множеством опций должен дать массив, который будет работать. В приведенном выше примере это будет эффективно Nade.by_grenade ([1,4]). Возможно, вы захотите защитить от пустого массива (при условии, что пустой список будет плохим).

+0

Я хотел бы создать модель для «гранаты», чтобы сделать эту форму? – Mellet

+0

Фигурировал, как сделать форму с опцией в виде массива :) – Mellet