ruby-on-rails - /posts 处的 ActionController::ParameterMissing 参数丢失或值为空:在 Rails 5.2 上发布
问题描述
我面临参数参数的问题。我正在遵循 rails 指南以便在我的应用程序中实现评论,但是当我尝试发表评论时,我收到了错误:
ActionController::ParameterMissing at /posts param is missing or the value is empty: post
这是控制器中将引发错误的代码
def post_params
params.require(:post).permit(:title, :text).tap do |post_params|
post_params.require(:title, :text)
end
end
这是链接到 post_params 方法的 create 方法
def create
@post = Post.new(post_params)
if @post.save
redirect_to @post
else
render 'new'
end
end
这是我调用 form_with 的视图
<h1>My post</h1>
<p><%= @post.title%></p>
<p><%= @post.text%></p>
<h2>Add a comment</h2>
<%= form_with(model: [@post, @post.comments.build], url: post_path, local: true) do |form|%>
<p>
<%= form.label :body%><br>
<%= form.text_field :commenter%>
</p>
<p>
<%= form.label :body%>
<%= form.text_area :body%>
</p>
<p>
<%= form.submit%>
</p>
<% end%>
<p><%= link_to "edit", edit_post_path %></p>
评论控制器:
class CommentsController < ApplicationController
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(comment_params)
redirect_to post_path(@post)
end
private
def comment_params
params.require(:comment).permit(:commenter, :body)
end
end
路线.rb
Rails.application.routes.draw do
resources :posts
resources :comments
root 'home#index'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
解决方案
从url: post_path
您的form_with
.
form_with
将能够正确地路由表单[@post, @post.comments.build]
。这应该路由到post_comments_path
,但您将其覆盖到post_path
。提交表单时posts#create
正在调用,并且 由于params 对象params.require(:post)
中没有键而引发错误。post
应按预期工作的post_comments_path
遗嘱路由。comments#create
您可以添加url: post_comments_path
为显式。
更新:
这NoMethodError
是由于缺少嵌套路由造成的。目前,评论的路由基于/comments/:id
路由和生成comment_path
助手。
我们可以使用嵌套路由来更好地定义我们的关系并使我们的控制器动作更加简洁。我们要更新routes.rb
为:
(您还应该在路由文件的顶部有您的根路由)
Rails.application.routes.draw do
root 'home#index'
resources :posts do
resources :comments
end
end
由于评论嵌套在帖子块中,Rails 将创建类似于posts/:post_id/comments/:comment_id
和的嵌套路由post_comments_path
。
推荐阅读
- javascript - Polarion EventtriggerConfiguration
- django - Django 3:将 URL 中的 slug 传递给视图?
- html - 按钮不会对齐 css/html
- java - 在 Java 中解析 json 字符串的特定元素
- python - 即使文件相等,filecmp 也会返回 False
- wpf - 如何将 StartupEventArgs 传递给 Prism 应用程序中的其他 ViewModel
- azure - Azure Devops - 多项目看板
- datastage - IBM DataStage:作业活动未按顺序继续
- html - 防止左列flexbox(导航)与主要内容一起滚动?
- jquery - jQuery对话框的问题,链接某些ID