为了账号安全,请及时绑定邮箱和手机立即绑定

具有嵌套资源的form_for

具有嵌套资源的form_for

MMMHUHU 2019-07-25 18:51:23
具有嵌套资源的form_for我有一个关于form_for和嵌套资源的两部分问题。假设我正在编写一个博客引擎,我想将评论与文章联系起来。我已经定义了一个嵌套资源,如下所示:map.resources :articles do |articles|     articles.resources :commentsend评论表单位于文章的show.html.erb视图中,位于文章本身下方,例如:<%= render :partial => "articles/article" %><% form_for([ :article, @comment]) do |f| %>    <%= f.text_area :text %>    <%= submit_tag "Submit" %><%  end %>这给出了一个错误,“为nil调用id,这会错误等等”。我也试过了<% form_for @article, @comment do |f| %>哪个呈现正确但将f.text_area与文章的“文本”字段而不是注释相关联,并在该文本区域中显示了article.text属性的html。所以我似乎也有这个错误。我想要的是一个表单,其'submit'将在CommentsController上调用create action,在params中有一个article_id,例如对/ articles / 1 / comments的post请求。我的问题的第二部分是,开始创建评论实例的最佳方法是什么?我正在ArticlesController的show动作中创建一个@comment,因此一个注释对象将在form_for帮助器的范围内。然后在CommentsController的create动作中,我使用从form_for传入的参数创建新的@comment。谢谢!
查看完整描述

3 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

您不需要在表单中执行特殊操作。您只需在show动作中正确构建注释:

class ArticlesController < ActionController::Base
  ....
  def show    @article = Article.find(params[:id])
    @new_comment = @article.comments.build  end
  ....end

然后在文章视图中为它创建一个表单:

<% form_for @new_comment do |f| %>   <%= f.text_area :text %>   <%= f.submit "Post Comment" %><% end %>

默认情况下,此注释将转到您可能想要放入的create操作CommentsControllerredirect :back因此您将被路由回Article页面。


查看完整回答
反对 回复 2019-07-25
  • 3 回答
  • 0 关注
  • 520 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信