param丢失或值为空:ph - rails

时间:2016-10-01 10:08:27

标签: ruby-on-rails ruby-on-rails-5

这可能是重复的,但我已阅读并尝试了几乎所有建议,但我不断收到新操作视图的错误。我正在使用Rails 5。

我尝试了以下内容:

private
   def ph_params
      params.require(:ph).permit(:amount)
   end

还尝试了以下内容,错误消失了,但我的值没有保存到数据库,只显示Nil:

private
   def ph_params
      params.permit(:amount)
   end

我的控制器:

class PhsController < ApplicationController
   def index
   end

   def new
     @ph = Ph.new(ph_params)
   end

   def create
     @ph = Ph.new(ph_params)
      respond_to do |format|
      if @ph.save
        format.html {   redirect_to @ph }
     else
        format.html { render "new" }
     end
     end
  end

   def show
     @ph = Ph.find(params[:id])
   end

private
  def ph_params
    params.require(:ph).permit(:amount)
  end
end

new.html.erb表单开始

<%= simple_form_for @ph, url: phs_path do |f| %>

模型

class Ph < ApplicationRecord

end

我可能会遗漏一些东西。非常感谢您的协助,谢谢您。

1 个答案:

答案 0 :(得分:1)

new操作修改为

def new
 @ph = Ph.new
end

您收到错误的原因是因为当您点击路线phs/new时,ph哈希中没有任何键params传递给控制器​​,但您是&#39 ;重新尝试访问params[:ph][:amount],这是ph_params的返回值。这就是错误&#39; param丢失或值为空的原因&#39;发生。

如果您想知道params对每个请求传递了哪些值,请将以下行添加到application.html.erb

<%= params.inspect %>

您可能会在{"controller" => "phs", "action" => "new"}页面中找到包含两个键new的哈希值。

但是,当您尝试创建新的ph对象时,您会在ph哈希中找到密钥params

顺便说一句,我觉得你不太了解strong parameters。我建议你阅读http://api.rubyonrails.org/classes/ActionController/StrongParameters.html