Пост контроллеру требуется должность - PullRequest
0 голосов
/ 06 мая 2020

В статье создается пост-контроллер.

Но в post_params params.require требует :post. Как это возможно или Что значит, что почтовый контроллер требует: post

def create
  Post.create(post_params)
  redirect_to root_path
end
private
def post_params
  params.require(:post).permit(:description, :image, :user_id)
end

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Имя класса :post требуется, потому что контроллер ожидает, что параметры будут упорядочены иерархически под своими именами классов, поскольку один единственный запрос POST может дать параметры, относящиеся ко многим классам. Например, описание вашего сообщения будет доступно как

params[:post][:description] 

. При разработке иногда полезно проверить параметры в окне браузера. Вы можете использовать этот простой код:

<% if !Rails.env.production? %>
  <%= debug(params) %>
<% end %>
0 голосов
/ 06 мая 2020

это способ Rails Controlling массового назначения атрибутов с помощью strong_parameters . этот подход запрещает массовое назначение атрибута модели из контроллера, если этот атрибут не был внесен в белый список.

белый список настроен с использованием двух методов

  • require , вызывая require будет проверять, что параметр действительно присутствует, если его нет, будет выдана ошибка
  • разрешение , разрешение вызова со списком атрибутов позволит этим атрибутам «пройти» для модели во время массовое присвоение (это ограничение отключает внедрение кода путем передачи запрещенных объектов, хэшей и т. д. c)

из вашего примера выше

params.require(:post).permit(:description, :image)

, что означает экземпляр сообщения должен существовать в параметрах и ключах / столбце, который позволяет передавать только описание и изображение, если ваша форма передает другое поле, например: other_description и оно не указано в разрешении, оно не будет сохранено

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