Ruby on Rails表单param缺失或值为空。但价值确定了

时间:2018-03-07 21:08:27

标签: ruby-on-rails ruby

我正在尝试在我制作的rails上提交ruby中的表单,但是继续得到de next错误。 Ruby on Rails表单:param缺失或值为空

我的表格

<%= form_for @test do |f| %>     
  <div class="field"> 
    <%= f.text_field :first_name %><br> 
    <%= f.text_field :last_name %><br>
  </div>
  <div class="actions"> 
    <%= f.submit "Create" %>
  </div>
<% end %>

我的控制器

  def new
    @test = Test.new
  end

  def create
    @test = Test.new(allow_params)
    if @test.save
      redirect_to 'test/index'
    else
      render 'test/new'
    end
  end

  private

  def allow_params
    params.require(:last_name).permit(:first_name) 
  end

我的路线

resources :test
  get 'test/index'
  get 'test/new'
  get 'test/create'
  post '/tests' => 'test#create'

2 个答案:

答案 0 :(得分:0)

您的属性位于test标签内,因此您应该去:

def allow_params
  params.require(:test).permit(:first_name, :last_name)
end

答案 1 :(得分:0)

看,这是您点击提交时形成帖子的内容:

 {"utf8"=>"✓","authenticity_token"=>"...", "test"=>"first_name"=>"poldo", "last_name"=>"de poldis"},"commit"=>"Create"}

正如您所看到的,first_namelast_name在哈希中作为名为test的密钥的值。的确,你的函数allow_params需要这样的东西

last_name: {first_name: 'poldo'}

你可以看到param(last_name)丢失了,因为它在test里面! 正如Ben回答的那样:

  params.require(:test).permit(:first_name, :last_name)

为了更好地了解参数的强大功能,我建议您查看此页Api doc或更好The latest version ofthe official manual