Как разрешить массив в сильных параметрах? - PullRequest
0 голосов
/ 11 мая 2019

На самом деле я отправляю массив идентификаторов в мой Rails API, но массив получен в виде хэша, где ключи являются индексом массива.

Я уже пытаюсь разрешить параметры params.permit(permission_ids: []) иничего ...

Миграция пользователя

class CreateUsers < ActiveRecord::Migration[5.1]
  def change
    create_table :users do |t|
      t.string :username, null: false
      t.string :email, null: true
      t.integer :language_id, null: false
      t.integer :permission_ids, array: true, default: []
      t.string :password_digest, null: false
      t.timestamps
    end
    add_index :users, :username, unique: true
  end
end

Метод пользовательских параметров в контроллере.

  def user_params
    params.require(:user).permit(:username,
                                 :email,
                                 :language_id,
                                 :password,
                                 :password_confirmation,
                                 permission_ids: [])
  end

Способ получения параметров

Parameters: {"user"=>{"username"=>"someusername", "email"=>"someemail@question.com", "language_id"=>"2", "permission_ids"=>{"0"=>"1", "1"=>"2", "2"=>"3", "3"=>"4", "4"=>"5", "5"=>"6", "6"=>"7", "7"=>"8", "8"=>"9", "9"=>"10", "10"=>"11", "11"=>"12"}}}

Кстати, я пишу из Vue, используя Axios.

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Способ получения массива идентификаторов:

def user_params
    params[:user][:permission_ids] = (params.dig(:user, :permission_ids) || {}).values
    params.require(:user).permit(:username,
                                 :email,
                                 :language_id,
                                 :password,
                                 :password_confirmation,
                                 permission_ids: [])
  end
0 голосов
/ 11 мая 2019

Вы также можете обновить вопрос с помощью HTML-формы, которая отправляет эти данные.Проблема также может быть в форме.

Если вы хотите, чтобы форма отправляла запись в виде массива, атрибут формы должен иметь вид

user['permission_ids'][]

.html форма поймет, что входные данные для permission_ids в html форме будут представлять массив.

Для получения дополнительной информации: https://stackoverflow.com/a/45233604/4940278

...