Как получить параметры тега collection_select с помощью ROR

У меня есть приложение для рельсов, в котором у меня есть поле с множественным выбором как таковое

 = section.collection_select(:room_ids, @rooms, :id, :location, {prompt:false}, {multiple: true, class: 'form-control list2' , required: true })
 = section.submit "", class: "save-btn"

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

Я пробую что-то вроде

    class SectionsController < InheritedResources::Base
  respond_to :html,:js
  before_action :get_rooms, only: [:edit,:new]

  def create
      room_ids = params[:room_ids]
      if room_ids.count > 20
        flash[:error] = "Too many rooms selected"
        redirect_to sections_path
      else
        create! { sections_path }
      end
  end

  def update
    update! { sections_path }
  end

  protected

  def permitted_params
    params.permit(section: [:name, :section_time, :credits, room_ids: []])
  end

  def get_rooms
    @unassigned_rooms = Room.left_outer_joins(:section).where("rooms.section_id IS ?", nil).order('rooms.location asc').all.map{ |room| [ room.location, room.id, { credit: room.credit } ] }
    @rooms = @section.rooms
  end

end

Но это не работает и дает мне ошибку, в которой говорится

undefined local variable or method `room_id' for #<SectionsController:0x007fc4ca7808c0> Did you mean? room_url

Я попытался изменить имя collection_select на room_ids[], но это не помогло, либо выдает ошибку, говоря

wrong number of arguments (given 0, expected 1..2)

Я в основном пытаюсь сделать, это пользователь создает раздел из нескольких комнат, выбирая комнаты из поля выбора, но пользователь может назначить только 20 комнат на раздел

Может ли кто-нибудь подсказать мне, что я делаю не так, или другую альтернативу, которую я могу попробовать?

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
0
34
1

Ответы 1

Вы создаете неожиданное имя поля с помощью room_id[] = ...

Вы должны делать ...

room_ids = params[:room_ids]
if room_ids.count > 20

Я тоже пробовал это, но это дает мне эту ошибку undefined method count 'for nil: NilClass` @SteveTurczyn

Mohammed Sayer 14.06.2018 21:59

Хорошо, добавьте gem 'pry' в свою группу разработки в вашем Gemfile, затем установите первую строку вашего метода create как binding.pry и запустите в разработке. Когда сервер останавливается, введите params, чтобы увидеть, как выглядят ваши параметры, и проверить, есть ли у вас params[:room_ids].

SteveTurczyn 15.06.2018 10:32

Другие вопросы по теме