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白名单的目的(此方法的目的)