Rails маршруты параметры найдите для формы
-
18-09-2019 - |
Вопрос
У меня есть небольшие проблемы с применением рельсов. Это коротко, это приложение для социальных сетей, где пользователи имеют профиль, имеют представления и могут комментировать представления.
Мои маршруты следующие:
map.connect '/:username', :controller => 'users', :action => 'show'
map.connect '/:username/:id', :controller => 'submissions', :action => 'show'
Поэтому, когда они просматривают подчинение, URL выглядит примерно как:
Номер - это идентификационный номер категории. Все идет нормально. Где я сталкиваюсь с проблемами, когда я пытаюсь отправить комментарий к представлению. Есть форма для отправки комментариев на каждой странице отправки, которая выглядит следующим образом:
<% form_for Comment.new do |f| %>
<%= f.text_area :message %>
<%= f.submit "Submit", :disable_with => 'Submitting...' %>
<% end %>
И контроллер выглядит так:
def create
submission = Submission.find(params[:id])
comment = cat.comments.create(params[:comment])
comment.created_at = Time.now
comment.save
redirect_to submission
end
Теперь каждый раз, когда я пытаюсь сделать возврат рельсов подчинения комментариев:
ActiveRecord::RecordNotFound in CommentsController#create Couldn't find Submission without an ID or undefined method `answers' for nil:NilClass
По сути, Rails не вытаскивает: ID из URL -адреса с Params, и я не знаю, почему. Страница отправки отображается правильно для каждого идентификатора в URL, поэтому я не понимаю, почему он не тянет его для этой формы. Если я явно назову идентификатор (т.е. upport.find (2345)), он работает отлично ... так что мне не хватает? Я просто глуп?
Мои отношения также настроены правильно.
Заранее спасибо.
Решение
Следующая часть кода генерирует форму, которая подчиняется comments
контроллер:
<% form_for Comment.new do |f| %>
Я считаю, что вы должны передать идентификатор подачи, затем внутри формы:
<%=hidden_field_tag(:submission_id, @submission.id)%>
И внутри контроллера комментариев вы должны снять этот идентификатор:
def create
submission = Submission.find(params[:submission_id])
comment = submission.comments.create(params[:comment])
comment.created_at = Time.now
comment.save
redirect_to submission
end
Это должно это решить, однако я рекомендую сделать вложенные ресурсы как второй шаг.