#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. Вау, это была ошибка новичка с моей стороны.