Rails 3在另一个控制器中呈现部分形式
Posted
技术标签:
【中文标题】Rails 3在另一个控制器中呈现部分形式【英文标题】:Rails 3 rendering form partial in another controller 【发布时间】:2011-06-08 05:27:33 【问题描述】:我有一个用于命名空间和嵌套资源(“blog/posts/cmets”)的部分表单,到目前为止,要使其正常工作很痛苦。我设法让它适用于“新”和“编辑”操作(在评论控制器中),但现在我想将它加载到父控制器(帖子)的“显示”视图中。不过,我尝试过的任何方法都行不通。
这是在“/blog/cmets/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| %>
我尝试使用标准的“渲染”命令调用此部分,但我收到以下错误,这很可能与我在上面的代码中为表单生成 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"
一个星期以来,我一直在努力解决这个问题,因此非常感谢任何帮助。谢谢!
【问题讨论】:
在渲染部分表单之前是否定义了@blog
、@comment
对象?
如果你的意思是“@post”和“@comment”,它们是在控制器中生成的。
【参考方案1】:
jQuery 来救援!
$("div#form").load("<%= new_blog_post_comment_path(@post) -%> #blog_post_comment_form")
如果有人知道更好的方法来做到这一点,我会全力以赴!
【讨论】:
以上是关于Rails 3在另一个控制器中呈现部分形式的主要内容,如果未能解决你的问题,请参考以下文章