Ruby on rails Rails:ActionController::ParameterMissing param缺失或值为空:
当我试图创建一个新的列表时,我遇到了以下错误,我无法找出问题所在Ruby on rails Rails:ActionController::ParameterMissing param缺失或值为空:,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,当我试图创建一个新的列表时,我遇到了以下错误,我无法找出问题所在 ActionController::ParameterMissing in BusinessListingsController#create param is missing or the value is empty: businesslisting 以下是列出控制器的业务代码: class BusinessListingsController < ApplicationController def index
ActionController::ParameterMissing in BusinessListingsController#create
param is missing or the value is empty: businesslisting
以下是列出控制器的业务代码:
class BusinessListingsController < ApplicationController
def index
@businesslistings = BusinessListing.all
end
def new
@businesslisting = BusinessListing.new
end
def create
@businesslisting = BusinessListing.new(businesslisting_params)
if @businesslisting.save
redirect_to @businesslisting
else
render 'new'
end
end
def show
@businesslisting = BusinessListing.find(params[:id])
end
private
def businesslisting_params
params.require(:businesslisting).permit(:title, :price, :city, :industry)
end
end
class BusinessListingsController
查看/业务列表/:
<div class="row">
<div class="col-md-6">
<%= form_for(@businesslisting) do |f| %>
<%= f.label :title %>
<%= f.text_field :title %>
<%= f.label :price %>
<%= f.text_field :price %>
<%= f.label :city %>
<%= f.text_field :city %>
<%= f.label :industry %>
<%= f.text_field :industry %>
<%= f.submit "Create a Listing", class: "btn btn-primary" %>
<% end %>
谢谢 问题在于您没有遵循Rails命名约定。您将类命名为
BusinessListing
,但将实例变量和参数引用命名为BusinessListing
BusinessListing
(驼峰大小写)本质上是两个单词,当使用实例变量名时,应将其作为snake大小写进行匹配:business\u listing
你的参数名也是如此,Rails使用类名来确定参数名,因此我打赌遇到的实际参数是business\u listing
,而不是businesslisting
只需将代码中出现的businesslisting
更改为business\u listing
(以及businesslistings
更改为business\u listings
),您就不会再遇到此问题
最重要的变化是:
params.require(:business_listing).permit(:title, :price, :city, :industry)
这本身就可以解决您当前的问题,但我强烈建议您在整个代码中遵循约定,以避免进一步的问题和混乱 我在Ubuntu 20.04中使用Rails 6API时遇到了这个挑战 我有一个
学校
资源(控制器、模型和路线),我需要使用邮递员创建一个学校。Schools
资源有两个参数(名称和别名)。因此,我使用Params部分来传递它,但我得到了错误:
app/controllers/schools_controller.rb:49:in `school_params'
app/controllers/schools_controller.rb:18:in `create'
Started POST "/schools" for ::1 at 2020-12-09 03:40:29 +0100
Processing by SchoolsController#create as */*
Parameters: {"name"=>"The Prince School", "alias"=>"The Prince"}
Completed 400 Bad Request in 0ms (ActiveRecord: 0.0ms | Allocations: 122)
ActionController::ParameterMissing (param is missing or the value is empty: school):
以下是我如何修复它的方法:
问题是应用程序需要另一个名为school
的参数,根据SchoolsController
中我的school\u参数
,该参数将封装其他参数:
def school_params
params.require(:school).permit(:name, :alias)
end
解决方案1:
我在标题部分中将内容类型
定义为应用程序/json
,然后使用以下方法将Postman的正文部分中的参数传递为原始json对象:
{
"school": {
"name": "The Prince School",
"alias": "The Prince"
}
}
而且效果很好
解决方案2:
我使用表单数据提交请求,方法是单击邮递员的正文部分并选择表单数据。所以请求看起来是这样的:
school[name]:The Prince School
school[alias]:The Prince
资源:
就这些
我希望这有帮助您能在创建操作期间粘贴控制台上输出的参数跟踪吗?尝试重新启动服务器,然后尝试现在更有意义的操作。非常感谢!!