Вопрос

У меня есть небольшие проблемы с применением рельсов. Это коротко, это приложение для социальных сетей, где пользователи имеют профиль, имеют представления и могут комментировать представления.

Мои маршруты следующие:

map.connect '/:username', :controller => 'users', :action => 'show'  
map.connect '/:username/:id', :controller => 'submissions', :action => 'show'

Поэтому, когда они просматривают подчинение, URL выглядит примерно как:

http://www.example.com/users_username/2342

Номер - это идентификационный номер категории. Все идет нормально. Где я сталкиваюсь с проблемами, когда я пытаюсь отправить комментарий к представлению. Есть форма для отправки комментариев на каждой странице отправки, которая выглядит следующим образом:

<% 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

Это должно это решить, однако я рекомендую сделать вложенные ресурсы как второй шаг.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top