Как запомнить флажок состояния Rails? - PullRequest
1 голос
/ 23 сентября 2019

Мое приложение имеет список навыков на выбор.Когда вы нажимаете «Сохранить», идентификатор пользователя и идентификатор навыка записываются в базу данных.

checkboxes

Если пользователь снова заходит на эту страницу, все флажкивыключены

Как проверить из базы данных, чтобы выбранные флажки всегда были включены в представление?

Мое представление:

= form_for(:skill_list, url: user_skill_list_index_path) do |f|
 %li
  = f.check_box(:a1, class: 'm-enabled')
  = f.label(:a1, 'Programming')
%li
  = f.check_box(:a2, class: 'm-enabled')
  = f.label(:a2, 'Communication')
%li
  = f.check_box(:a3, class: 'm-enabled')
  = f.label(:a3, 'Problem-solving')
%li
  = f.check_box(:a4, class: 'm-enabled')
  = f.label(:a4, 'Teamwork')
%li
  = f.check_box(:a5, class: 'm-enabled')
  = f.label(:a5, 'Creative')
%li
  = f.check_box(:a6, class: 'm-enabled')
  = f.label(:a6, 'Marketing')

Мой контроллер:

def create
  @skill_record = UserSkillList.where(user_id: current_user.id).first

  skill_params = params[:skill_list]
  skills = []

  skill_params.each do |k, v|
    if v == '1'
      id = k.dup
      id.slice!(0).to_i
      skills << id
    end
  end

  if @skill_record.blank?
    UserSkillList.create(user_id: current_user.id, skill_id: skills)
  else
    @skill_record.update_attributes(skill_id: skills)
  end
  redirect_to :back
end

Моя запись в БД:

db-record

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Использование логических полей в таблице UserSkillList для каждого навыка (Программирование, Связь и т. Д.) Решит вашу проблему.В этом случае у вас будет форма form_for для объекта набора навыков, который может ссылаться на эти столбцы логической таблицы.

Тогда это будет работать

= f.check_box(:programming, class: 'm-enabled')

Если вы действительно хотите «список навыков» вбазе данных, используйте хеш с логическими значениями, а не массив.то есть {программирование: правда, связь: ложь и т. д.}.Используйте «текст» как тип.

Единственная логика, соединяющая ваш «серийный номер» с названием навыка, - это цикл, который создает массив навыков.Так что это вообще не серийный номер, если вы нигде не можете найти ссылку.

0 голосов
/ 23 сентября 2019

Rails check_box

Принимает 2 параметра checked и unchecked значение

=> Например, если a1, a2, .. равны boolean поле, тогда оно должно быть

= f.check_box :a1, {class: 'm-enabled'}, true, false

=> Например, если a1, a2, .. - это любое поле string, тогда оно должно быть

= f.check_box :a1, {class: 'm-enabled'}, "value-for-checked", "value-for-unchecked"  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...