【发布时间】:2019-05-24 23:33:53
【问题描述】:
我有一个Documenthas_manySection,每个sectionhas_oneComment。我希望能够在 Document show 视图中同时创建 sections 和 comments,但我无法让 comments 通过。
这是我所拥有的最接近的相关代码:
class CommentsController < ApplicationController
def create
@section = Section.find(params[:id])
@section.comment.create(comment_params)
end
private
def comment_params
params.require(:comment).permit(:body)
end
end
路由:
resources :documents, shallow: true do
resources :sections do
resources :comments
end
end
以及带有表单的视图:
# app/views/documents/show.html.erb
<% @document.sections.each do |section| %>
<%= section.body %>
<% if section.comment %>
<p>
<%= section.comment %>
</p>
<% else %>
<%= form_with url: section_comments_path(section.id), scope: 'comment' do |form| %>
<%= form.text_field :body, placeholder: "Comment" %>
<%= form.submit %>
<% end %>
<% end %>
<% end %>
这一切似乎都适合我,但是当我尝试发表评论时,我得到了以下信息:
Started POST "/sections/51/comments" for ::1 at 2019-05-24 23:29:06 +0000
Processing by CommentsController#create as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>[...], "comment"=>{"body"=>"asdas"}, "commit"=>"Save comment", "section_id"=>"51"}
Section Load (0.5ms) SELECT "sections".* FROM "sections" WHERE "sections"."id" = ? LIMIT ? [["id", 51], ["LIMIT", 1]]
comment Load (0.4ms) SELECT "comments".* FROM "comments" WHERE "comments"."section_id" = ? LIMIT ? [["section_id", 51], ["LIMIT", 1]]
Completed 500 Internal Server Error in 11ms (ActiveRecord: 0.9ms)
NoMethodError (undefined method `create' for nil:NilClass):
app/controllers/comments_controller.rb:4:in `create'
有什么想法吗?
【问题讨论】:
-
由于 cmets 嵌套在路由中的部分下,因此您应该在创建操作中找到 params[:section_id] 而不是 params[:id] 中的部分。
标签: ruby-on-rails forms ruby-on-rails-5 nested-resources