Добро пожаловать в Stack Overflow!
Вы хотите получить форму для нового обзора на странице показа вашей стажировки. Помните, что для создания новой записи обычно требуется два действия в Rails - new и create. New
- это страница, которая обычно имеет форму, а create
- это действие после отправки формы.
Теперь, если вы хотите получить форму на странице показа стажировки, вам не нужно new
действие больше. Вы можете переместить саму форму в представление для стажировки, и если вы используете какие-либо переменные экземпляра в этой форме, они go в interships_controller#show
.
# controllers/internships_controller.rb
...
def show
...
@review = Review.new
end
# views/internships/show.html.erb
<%= form_with(model: @review, local: true) do |form| %>
...
Теперь, когда вы нажмете "Подтвердить" в форме, она все равно будет go до reviews_controller#create
. Это из-за того, что с первой строкой в форме происходит какое-то «волшебство» c. Загрузите свою страницу в браузере и проверьте форму в инспекторе. Это будет выглядеть примерно так (плюс намного больше атрибутов).
<form action="/reviews" method='post'>
Это означает, что когда вы нажмете "Отправить", он отправит HTTP-запрос после отправки, который переходит на /reviews
. Если вы правильно настроили свои маршруты, вы можете проверить с помощью rails routes
в терминале и увидеть, что это будет go до reviews_controller
до create
действия. Таким образом, вы можете обработать логику c создания нового обзора. Если вы новичок, я бы порекомендовал вам удалить весь блок respond_to
и сделать это вместо этого:
# controllers/reviews_controller.rb
def create
@review = Review.new(review_params)
@review.review_user = current_user
if @review.save
redirect_to @review, notice: 'Review was successfully created.' }
else
render :new
end
end
end
И здесь у вас есть возможность перенаправить обратно на страницу показа стажировок. Но как узнать, для какой стажировки этот обзор был только что сделан? Вы только что создали поле в форме, которая хороша - но не очень интуитивно понятна для пользователя. Он / она находится на странице показа стажировки и теперь должен указать, для какой стажировки этот обзор? Далее вы должны взглянуть на вложенные ресурсы, но для этого вопроса было бы немного.
Еще один совет: вы назвали внешний ключ для стажировок в таблице отзывов review_internship_id
, что немного необычно, что Вы можете видеть, когда вы звоните @review.review_internship
. Просто internship
- это хорошо, и тогда вы можете сделать @review.internships
- коротко и просто.