参数缺失或值为空:ph - rails

param is missing or the value is empty: ph - rails

这可能是重复的,但我已经阅读并尝试了几乎所有的建议,但我总是在新操作视图中收到错误消息。我正在使用 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

我可能遗漏了什么。感谢您的协助,提前致谢。

将您的 new 操作修改为

def new
 @ph = Ph.new
end

您收到错误的原因是因为当您访问路由 phs/new 时,params 散列中没有密钥 ph 传递给控制器​​,但您试图访问 params[:ph][:amount],这是 ph_params 的 return 值。这就是错误 'param is missing or the value is empty' 发生的原因。

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

<%= params.inspect %>

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

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

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