Ответ, вероятно, на любом учебном пособии, которое вы читаете, но, к счастью, Ruby и Rails легко читаются, если вы знаете основы.
@post = Post.find(params[:post_id])
означает, что @post
, переменная экземпляра, которая будет содержать ваше сообщение, должна быть установлена в (=
) значение, возвращаемое из таблицы Post
, путем find
записи, чья id
поле соответствует значению в поле post_id
в параметрах, переданных этому контроллеру в первую очередь.
@comment = @post.comments.create(comments_params)
означает, что для переменной экземпляра @comment
должно быть установлено (=
) значение, возвращаемое при запуске метода comments.create
для только что созданного объекта @post
. То есть код принимает объект @post
и запускает на нем метод comments.create
, так что созданный комментарий будет иметь тот же идентификатор, что и это сообщение (то есть будет связан с ним в базе данных). Другие части записи комментария (например, текст самого комментария) будут взяты из переменной comments_params
, которая будет отфильтрованной версией переменной params
, которую вы использовали в строке ранее - ищите приватную функцию с именем comments_params
, который сообщает, какие поля из params
могут быть переданы в созданный комментарий. (Это так называемая функция «сильных параметров» в Rails, которая позволяет вам убедиться, что пользователи не пытаются пробраться через ваш код, чтобы взломать ваше приложение.)
Если вы хотите узнать больше о параметрах и объектах, взгляните на то, что передается вокруг вашего приложения, используя byebug
или через параметры отладки (поместите код <%= debug(params) if Rails.env.development? %>
в макет приложения, чтобы увидеть множество интересных значений на каждой странице).