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在另一个控制器中呈现部分形式的主要内容,如果未能解决你的问题,请参考以下文章

在另一个模型控制器中使用的 Rails 3 虚拟属性

从rails中的控制器渲染部分

Rails 3.1:视图不在命名空间布局中呈现

Rails:2单击一个提交按钮在两个数据库中插入记录(将一个控制器的记录保存在另一个控制器中)

解决 Rails 3.2 中控制器的视图路径

将 Javascript 数组发送到控制器并在另一个 URL 中呈现视图结果