我有一个关于form_for和嵌套资源的两部分问题。假设我正在编写一个博客引擎,我想将评论与一篇文章联系起来。我如下界定的巢资源:form_for嵌套资源
map.resources :articles do |articles|
articles.resources :comments
end
评论表单是在文章show.html.erb观点,文章本身的下方,比如像这样:
<%= render :partial => "articles/article" %>
<% form_for([ :article, @comment]) do |f| %>
<%= f.text_area :text %>
<%= submit_tag "Submit" %>
<% end %>
这给出一个错误,“被调用的id为零,这会错误地等。”我也试着
<% form_for @article, @comment do |f| %>
哪个正确呈现,但涉及f.text_area文章的“文本”字段,而不是评论的,并提出了在该文本区域article.text属性的HTML。所以我似乎也有这个错误。我想要的是一个表单,其'submit'将在CommentsController上调用create操作,在params中带有article_id,例如对/ articles/1/comments的发布请求。
我的问题的第二部分是,创建评论实例的最佳方式是什么?我在ArticlesController的show动作中创建了@comment,所以一个注释对象将在form_for助手的范围内。然后在CommentsController的创建动作中,我使用从form_for传入的参数创建新的@comment。
谢谢!
这是工作,但我必须像jamuraa说的那样修改控制器。 – 2014-05-17 15:26:27
果酱的方式很有效,但您最终可能会遇到您可能不知道的其他路线。最好是明确的。 – cdunn2001 2014-06-28 19:13:32
我嵌套了资源,@result在@course里面。尽管'[@result,@ course]'有效,但'form_for(@result,url:{action:“create”})'也可以。这只需要最后的型号名称和方法名称。 – Anwar 2015-09-04 05:57:54