параметр отсутствует или значение пустое: ph — rails

#ruby-on-rails #ruby-on-rails-5

#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
  

запуск новой формы .html.erb

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

Модель

 class Ph < ApplicationRecord

end
  

Возможно, я что-то упускаю. Мы ценим вашу помощь, заранее благодарим вас.

Ответ №1:

Измените свое new действие на

 def new
 @ph = Ph.new
end
  

Причина, по которой вы получаете ошибку, заключается в том, что когда вы нажимаете на маршрут phs/new , ph в params хэше контроллеру не передается ключ, но вы пытаетесь получить доступ params[:ph][:amount] к возвращаемому значению ph_params . Вот почему возникает ошибка «параметр отсутствует или значение пустое».

Если вы хотите знать, какие значения были переданы в params has для каждого запроса, добавьте следующую строку в свой application.html.erb

 <%= params.inspect %>
  

Вероятно, вы найдете хэш с двумя ключами {"controller" => "phs", "action" => "new"} на new странице.

Однако, когда вы пытаетесь создать новый ph объект, вы найдете ключ ph в своем params хэше.

Кстати, я думаю, вы не совсем понимаете strong parameters . Я бы посоветовал вам прочитать http://api.rubyonrails.org/classes/ActionController/StrongParameters.html

Комментарии:

1. Вау, это была ошибка новичка с моей стороны.