Я работаю через RailsTutorial , но создаю веб-приложение "Объявления" для средней школы, в котором я преподаю (настройка данного клона Twitter).
Когда пользователи создают объявление, они используют флажки, чтобы определить, каким оценкам оно должно отображаться (1-3 оценки могут быть истинными). Это работает правильно, я храню оценки как булевы.
create_table "announcements", :force => true do |t|
t.string "content"
t.integer "user_id"
t.boolean "grade_6"
t.boolean "grade_7"
t.boolean "grade_8"
t.date "start_date"
t.date "end_date"
t.datetime "created_at"
t.datetime "updated_at"
конец
У моих пользователей также есть поле оценки, которое является целым числом. Я хочу использовать это, чтобы домашняя страница каждого пользователя показывала объявления для его оценки.
Пример: учитель 8-го класса имеет оценку = 8. Когда они входят в систему, на их домашней странице должны отображаться только объявления, у которых оценка_8 = ИСТИНА.
Пример: участник имеет оценку = 0. Когда они входят в систему, на их домашней странице должны отображаться все объявления.
Я борюсь с тем, как преобразовать целочисленное значение user.grade в логические флаги для извлечения объявлений из модели.
Код, который я пишу, работает, но невероятно неуклюж. Пожалуйста, помогите мне сделать что-то более элегантное! Я не привязан к этой модели БД, если у вас есть идея получше. (На самом деле, мне действительно не нравится эта модель БД, поскольку я жестко задаю количество оценок в нескольких местах).
# Code to pull announcements for the home page
def feed
case grade
when 6
grade_6
...
else
grade_all
end
end
# Example function to pull announcements for a grade
def grade_6
Announcement.where("grade_6 = ? AND start_date >= ? AND end_date <= ?",
TRUE, Date.current, Date.current)