has_many, own_to и формы комментариев - PullRequest
0 голосов
/ 16 апреля 2010

У меня две модели: Snippet и SnippetComment. Они также имеют свои собственные контроллеры, а также представления. В /app/views/snippets/show.html.erb у меня есть форма, которая начинается так:

<% form_for(@new_snippet_comment) do |form| %>

SnippetComment принадлежит одному Snippet, а Snippet принадлежит одному User. Это означает, что у меня есть эта маршрутизация (making it non-RESTful == making it suck, как вы знаете):

map.resources :users do |user|
  user.resources :snippets do |snippet|
    snippet.resources :snippet_comments, :as => "comments"
  end
end

Поэтому, когда я отправляю форму SnippetComment в представлении SnippetController#show, этот запрос должен быть выполнен:

POST /users/x/snippets/x/comments HTTP/1.1

(где x - User или Snippet id).

Проблема в том, что я даже не получаю форму для отправки комментариев, а вот что:

NoMethodError in Snippets # show

Показываются app / views / snippets / show.html.erb где строка № 29 поднята:

undefined method `snippet_comments_path' for

Извлеченный источник (вокруг строки #29):

26: <% if current_user %>
27: <h2>Schrijf een nieuwe reactie</h2>
28: 
29: <% form_for(@new_snippet_comment) do |form| %>
30: 
31: <p>
32:   <%= form.text_area :body %>

RAILS_ROOT: / Users / jeffatwood / Dev / youjustdontneedmyrealname

Трассировка приложения | Framework Trace | Полная трассировка

/Users/jeffatwood/.gem/ruby/1.8/gems/actionpack-2.3.5/lib/action_controller/polymorphic_routes.rb:107:in `__send__'
/Users/jeffatwood/.gem/ruby/1.8/gems/actionpack-2.3.5/lib/action_controller/polymorphic_routes.rb:107:in `polymorphic_url'
/Users/jeffatwood/.gem/ruby/1.8/gems/actionpack-2.3.5/lib/action_controller/polymorphic_routes.rb:114:in `polymorphic_path'
/Users/jeffatwood/.gem/ruby/1.8/gems/actionpack-2.3.5/lib/action_view/helpers/form_helper.rb:298:in `apply_form_for_options!'
/Users/jeffatwood/.gem/ruby/1.8/gems/actionpack-2.3.5/lib/action_view/helpers/form_helper.rb:277:in `form_for'
/Users/jeffatwood/Dev/youjustdontneedmyrealname/app/views/snippets/show.html.erb:29:in `_run_erb_app47views47snippets47show46html46erb'
/Users/jeffatwood/Dev/youjustdontneedmyrealname/app/controllers/snippets_controller.rb:19:in `show'

Запрос

Параметры:

{"id"=>"1",
 "user_id"=>"2"}

Показать дамп сеанса

Ответ

Заголовки:

{"Content-Type"=>"text/html",
 "Cache-Control"=>"no-cache"}

О, в snippets_controller.rb У меня есть это:

def show
  @snippet = Snippet.find(params[:id], :conditions => { :user_id => params[:user_id] })
  @new_snippet_comment = SnippetComment.new

  respond_to do |format|
    format.html
    format.xml
    format.json
  end
end

Может кто-нибудь помочь мне с этой проблемой? Спасибо

Ответы [ 2 ]

0 голосов
/ 16 апреля 2010

У вас есть два уровня вложенности (то есть пользователь -> фрагмент -> комментарий), поэтому ваш синтаксис form_for должен быть следующим:

form_for [@user, @snippet, @comment]
0 голосов
/ 16 апреля 2010

Вы должны передать snipped_id при создании @new_snippet_comment

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