0

Мне хорошо известно назначение атрибутов данных параметрам в традиционном блоке выбора с использованием Simple Form, но когда дело доходит до сгруппированных параметров, я, похоже, сталкиваюсь с некоторыми проблемами. Я нашел post, который объясняет, как сделать это SANS простой формы:Присвоение атрибутов параметрам в group_select с использованием простой формы

<%= f.select :game_id, grouped_options_for_select(@consoles.map{ |console| [console.name, console.games.map{ |g| [g.title, g.id, {'data-game'=> g.title.downcase.gsub(/\s+/, "-")}] } ] }, selected_key = f.object.game_id) %> 

Когда я пытаюсь перевести это в соответствующий синтаксис я получаю эту ошибку:

undefined method 'games' for ["PS3", []]:Array

<%= f.input :game_id, as: :grouped_select, collection: @consoles.map{ |console| [console.name, console.games.map{ |g| [g.title, g.id, {'data-game'=> g.title.downcase.gsub(/\s+/, "-")}] } ] }, group_method: :games, include_blank: "Select a game", input_html: {class: "boost__game"} %> 

Модели

class Game < ActiveRecord::Base 
    # attributes: title 
    has_and_belongs_to_many :consoles 
end 


class Console < ActiveRecord::Base 
    # attributes: name 
    has_and_belongs_to_many :games 
end 

Какая проблема?

+0

консольная массив? –

+0

Его модель находится в отношениях 'has_and_belongs_to_many' с моделью' Game'. –

+0

Я думаю, что ошибка где-то в другом месте ... –

ответ

1

Попробуйте это,

<%= f.input :game_id, as: :grouped_select, collection: @consoles.map{ |console| [console.name, console.games.map{ |g| [g.title, g.id, {'data-game'=> g.title.downcase.gsub(/\s+/, "-")}] } ] }, group_method: :last, include_blank: "Select a game", input_html: {class: "boost__game"} %> 
+0

С помощью этого кода опции для окна выбора включают все ключи внутри предоставленного в хэш файла f.select: 'as, grouped_select, collection, include_blank, class' –

+0

Будет ли ваше значение коллекции иметь формат' [['Авторы ', [' Jose ',' Carlos ']], [' General ', [' Bob ',' John ']]]. Я хочу сказать, '@ consoles.map {| console | [console.name, console.games.map {| g | [g.title, g.id, {'data-game' => g.title.downcase.gsub (/ \ s + /, "-")}]}]} 'будет иметь формат' [['Авторы ', [' Jose ',' Carlos ']], [' General ', [' Bob ',' John ']]] ' –

+0

Да. Таким образом, название группы в поле выбора будет именем консоли, а вложенными параметрами будет название игр. Надеюсь, это переведет ваш пример в мою текущую ситуацию: '[['Xbox One', ['Halo', 'Tomb Raider']], ['PS4', ['Drive Club', 'Last of Us']]]' –

Смежные вопросы