我有一个关于 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 %>
这会给出一个错误,“Called id for nil,这会错误地等等。” 我也试过
<% form_for @article, @comment do |f| %>
它正确呈现,但将 f.text_area 与文章的“文本”字段而不是评论相关联,并在该文本区域中显示 article.text 属性的 html。所以我似乎也有这个错误。我想要的是一个表单,它的“提交”将调用 CommentsController 上的创建操作,参数中有一个 article_id,例如对 /articles/1/comments 的发布请求。
我的问题的第二部分是,创建评论实例的最佳方法是什么?我在 ArticlesController 的 show 动作中创建了一个 @comment,所以一个评论对象将在 form_for 助手的范围内。然后在 CommentsController 的创建操作中,我使用从 form_for 传入的参数创建新的@comment。
谢谢!