Rails 3 частично отображает форму на другом контроллере

#ruby-on-rails #view #partial #form-for

#ruby-on-rails #Вид #частично #форма-для

Вопрос:

У меня есть частичная форма для ресурса с пространством имен и вложенностью («блог / сообщения / комментарии»), который до сих пор было сложно заставить работать должным образом. Мне удалось заставить ее работать для действий «создать» и «редактировать» (в контроллере комментариев), но теперь я хочу загрузить ее в представление «показать» родительского контроллера (Posts). Однако ничего из того, что я пробовал, не сработает.

Вот как создается форма в «/ blog/ comments /shared/_comment_form.html.erb»:

 <%= form_for([:blog, @post, @comment], 
             :url => { :controller => :comments, :action => (@comment.persisted? ? :update : :create) }, 
             :html => { :id => "blog_post_comment_form", :class => "standard_form wide" }) do |f| %>
  

Я попытался вызвать этот частичный, используя стандартную команду «render», но я получаю следующую ошибку, которая, скорее всего, связана с тем, как я генерирую URL для формы в приведенном выше коде:

 No route matches {:action=>"create", :controller=>"blog/comments"}
actionpack (3.0.7) lib/action_dispatch/routing/route_set.rb:425:in `raise_routing_error'
  

Вот мои маршруты:

 blog_post_comments     GET    /blog/posts/:post_id/comments(.:format) {:controller=>"blog/comments", :action=>"index"}
                       POST   /blog/posts/:post_id/comments(.:format) {:controller=>"blog/comments", :action=>"create"}
new_blog_post_comment  GET    /blog/posts/:post_id/comments/new(.:format) {:controller=>"blog/comments", :action=>"new"}
edit_blog_post_comment GET    /blog/posts/:post_id/comments/:id/edit(.:format) {:controller=>"blog/comments", :action=>"edit"}
blog_post_comment      GET    /blog/posts/:post_id/comments/:id(.:format) {:controller=>"blog/comments", :action=>"show"}
                       PUT    /blog/posts/:post_id/comments/:id(.:format) {:controller=>"blog/comments", :action=>"update"}
                       DELETE /blog/posts/:post_id/comments/:id(.:format) {:controller=>"blog/comments", :action=>"destroy"}
  

Я уже неделю бьюсь головой об стену с этим, поэтому любая помощь очень ценится. Спасибо!

Комментарии:

1. есть ли у вас @blog , @comment объекты, определенные перед рендерингом частичной формы?

2. Если вы имеете в виду «@post» и «@comment», они генерируются в контроллере.

Ответ №1:

jQuery спешит на помощь!

 $("div#form").load("<%= new_blog_post_comment_path(@post) -%> #blog_post_comment_form")
  

Если кто-нибудь знает лучший способ сделать это, я весь внимание!