Ruby on rails Ruby on Rails参数缺失或值为空
我有一个网页,作为一个停车场的排序/新页面是我们可以将汽车添加到“停车场”的页面,但在提交表单时,我在控制器上遇到以下错误:Ruby on rails Ruby on Rails参数缺失或值为空,ruby-on-rails,Ruby On Rails,我有一个网页,作为一个停车场的排序/新页面是我们可以将汽车添加到“停车场”的页面,但在提交表单时,我在控制器上遇到以下错误: class CarLogsController < ApplicationController def index end def new @carlog = CarLog.new end def create @carlog = CarLog.new(carlog_params) #Error here end d
class CarLogsController < ApplicationController
def index
end
def new
@carlog = CarLog.new
end
def create
@carlog = CarLog.new(carlog_params) #Error here
end
def carlog_params
params.require(:carlog).permit! #Error here
end
def show
@carlogs = CarLog.all
end
def destroy
@carlog= CarLog.find(params[:id])
@carlog.destroy()
redirect_to show_path
end
end
参数丢失或值为空:carlog
以下是控制器的代码:
class CarLogsController < ApplicationController
def index
end
def new
@carlog = CarLog.new
end
def create
@carlog = CarLog.new(carlog_params) #Error here
end
def carlog_params
params.require(:carlog).permit! #Error here
end
def show
@carlogs = CarLog.all
end
def destroy
@carlog= CarLog.find(params[:id])
@carlog.destroy()
redirect_to show_path
end
end
class CarLogsController
页面的相应视图代码如下所示
<h1>New</h1>
<%= form_tag "/carlogs/create" do %>
<p>Plate number:
<input type="text" name="platenumber" /></p>
<p>Brand:
<select name="brand">
<option value="Toyota">Toyota</option>
<option value="Honda">Honda</option>
<option value="BMW">BMW</option>
</select></p>
<p>Slot number
<input type="text" name="slotnumber" /> </p>
<p><input type="checkbox" name="istaken" value="true" /> Is taken?</p>
<input type="submit" value="Submit" />
<% end %>
新建
车牌号:
品牌:
丰田
本田
宝马
槽号
有人吗
谢谢你对我的帮助
<input type="text" name="carlog[platenumber]" /></p>
名字应该有
carlog[platenumber]
我想这是不存在的 两个即时更正:
您应更改为:
def carlog_params
params.permit! # or to be explicit params.permit(:platenumber, :brand, :slotnumber, :istaken)
end
然后,如果您使用的是rails路由器,那么您的操作不应该是carlogs/create
,而应该是/carlogs
#routes.rb
resources :carlogs, only: [:create]
如果要将模型绑定到表单,则需要
参数。require
,如果要使用表单_进行
,请按如下所示更新您的方法
def carlog_params
params.require(:carlog).permit(:platenumber,:brand,:slotnumber,:istaken)
end
并用此更新您的表单
<h1>New</h1>
<%= form_tag "/carlogs/create" do %>
<p>Plate number:
<input type="text" name="carlog[platenumber]" />
</p>
<p>Brand:
<select name="carlog[brand]">
<option value="Toyota">Toyota</option>
<option value="Honda">Honda</option>
<option value="BMW">BMW</option>
</select>
</p>
<p>Slot number
<input type="text" name="carlog[slotnumber]" />
</p>
<p>
<input type="checkbox" name="carlog[istaken]" value="true" /> Is taken?
</p>
<input type="submit" value="Submit" />
<% end %>
新建
车牌号:
品牌:
丰田
本田
宝马
槽号
有人吗?
我建议您使用rails表单及其表单的输入标签。不要使用纯html表单。此错误意味着此参数名称在参数哈希中不可用。这可能是因为您没有将form_for元素直接绑定到您在新方法中创建的@carlog对象。在执行任何操作之前,请检查params散列以查看其中的可用值 您的表单应该如下所示,例如
<%= form_for @carlog do |f| %>
<%= f.text_field :name %>
<%= f.submit "Submit" %>
<% end %>
实际上,视图代码实际上违反了rails标准,因为它没有将for绑定到资源,理想情况下,如果将表单绑定到资源,则不会出现此问题。检查所附代码
<h1>New</h1>
<%= form_for @carlog do |f| %>
<%= f.text_field :platenumber %>
<%= f.select :brand, [['Toyota', 'Toyota'], ['Honda', 'Honda'], ['BMW', 'BMW']] %>
<%= f.text_field :slotnumber %>
<%= f.check_box :istaken %>
<%= f.submit "Submit" %>
<% end %>
新建
我照你说的做了。错误现在显示为:CarLog的未知属性“PlatNumber”。@Kevin:看来你的CarLog对象没有PlatNumber属性你为什么不使用rails的机制来构建表单<代码>为,f.选择
和他们的朋友?同时,使用许可代码>?这违背了params白名单的目的(此方法的目的)