Как использовать params в Rails? - PullRequest
0 голосов
/ 08 июля 2019

У меня есть пост-контроллер, сохраняющий посты с разными атрибутами. На посте также есть вложения. Эти вложения возвращают только идентификатор объекта. my_cards , my_folders , other_cards и other_folders - все эти поля. Они определены как массивы в модели.

Я передаю правильные параметры из формы, как показано ниже. Все правильные данные присутствуют.

Титулы

{"_id"=>"", "title"=>"Test Post Card attach 28", "description"=>"", 
"privacy"=>"public", "url_ids"=>"", "image_ids"=>"", 
"attached_card_ids"=>"", "my_card_ids"=>:my_card_ids, 
"my_folder_ids"=>"5d21dc7c616b656a9c030000", 
"other_card_ids"=>"5d1b1942616b656d10360000", 
"other_folder_ids"=>"5cfe2bdf69702d0aa3010200", "domain"=>"localhost", 
"controller"=>"api/v1/posts", "action"=>"create", 
"owner_id"=>"5d125102616b657131020000", 
"user_id"=>"5d125102616b657131020000"}

Но когда я сохраняю сообщение, метод post_params помечает некоторые поля как недопустимые, даже если они определены как массивы в методе post_params.

POST-PARAMS

Unpermitted parameters: _id, url_ids, image_ids, attached_card_ids, 
my_card_ids, other_card_ids, other_folder_ids, domain
{"title"=>"Test Post Card attach 28", "privacy"=>"public", 
"description"=>"", "owner_id"=>"5d125102616b657131020000", 
"user_id"=>"5d125102616b657131020000", "my_folder_ids"=>nil}

Мой метод post_params выглядит следующим образом

def post_params
  params.permit(:id, :title, :privacy, :description, 
   :owner_id,:user_id,
   :url_ids => [], :image_ids => [], :attached_card_ids => [],
   my_card_ids: [], my_folder_ids: [],
   :other_card_ids => [], :other_folder_ids => [])
end

Я попробовал несколько способов определения массива в методе post_params после исследования других вопросов переполнения стека.

EDIT

Мне удалось сохранить запись в базе данных Mongo. Атрибуты выглядят так.

"my_card_ids" : [
        "5d1b83a6616b6523a9020000,5d1b9893616b653abd0b0000"
], 
"my_folder_ids" : [
        "5d21dc7c616b656a9c030000"
], 
"other_card_ids" : [
        "5d1b168c616b656d10140000"
], 
"other_folder_ids" : [
        "5cfe2bdf69702d0aa3010200"
]

Они хранятся в виде строк, как я могу сохранить их как идентификаторы, так же, как это

"collections" : [ 
        ObjectId("5d125102616b657131020000"),
]

1 Ответ

3 голосов
/ 08 июля 2019

Можете ли вы добавить HTML формы, которую вы используете для публикации данных формы.

Показанные выше параметры показывают

"my_folder_ids"=>"5d21dc7c616b656a9c030000", 
 "other_card_ids"=>"5d1b1942616b656d10360000", 
"other_folder_ids"=>"5cfe2bdf69702d0aa3010200"

в виде строк.В контроллере вы разрешили их как массивы, а отправили их в виде простых строк.

Чтобы исправить это, атрибут имени html для полей должен иметь значение name="my_folder_ids[]" вместо name=my_folder_id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...