2012-05-09 3 views
1

У меня есть это на моем взгляде:Формы для другого контроллера - Маршрутизация

<%= form_for @comment, :as => :post, :url => user_ticket_message_comments_path, :html => { :class => "add-comment", :id => "add-comment-" + @ticket.id.to_s } do |f| %> 
    <%= f.label :body, "Add comment" %> 
    <%= f.text_area :body %> 
    <%= f.submit "Add comment" %> 
<% end %> 

В моем routes.rb:

resources :users do 
    resources :tickets do 
    resources :messages do 
     resources :comments 
    end 
    end 
end 

Я получаю ошибку маршрутизации:

No route matches {:controller=>"comments"}

ответ

4

Похоже, что вам не хватает пользователя, билет и сообщение:

user_ticket_message_comments_path(@user, @ticket, @message) 

Вам нужны эти параметры, так как URL генерируется, выглядит так:

/users/:user_id/tickets/:ticket_id/messages/:message_id/comments 

без аргументов, Rails не знает, как генерировать этот URL.

Кроме того, считают, что правило в Rails приложения является то, что "Resources should never be nested more than 1 level deep."

This post по Jamis Buck предполагает, что вместо того, чтобы произвольно вложенности ресурсов, можно использовать только один уровень вложенности, как это:

resources :users do 
    resources :tickets 
end 

resources :tickets do 
    resources :messages 
end 

resources :messages do 
    resources :comments 
end 
+0

Великое напоминание о правилах! – TheIrishGuy

+0

Как я могу отразить эту маршрутизацию? Я чувствую, что он интуитивно понятен (у пользователя есть билеты с сообщениями и комментариями) –

+0

@rabid_zombie см. Измененный ответ – psyho

Смежные вопросы