#ruby-on-rails #validation
#ruby-on-rails #проверка
Вопрос:
У меня есть форма
<%= f.input :firstname, :label => "Forename", :input_html => { :placeholder => "Forename"} %>
<%= f.input :surname, :label => "Surname", :input_html => { :placeholder => "Surname", :"data-
<%= f.input :publiclyfundedteaching, :label => "Publicly funded teaching (PFT)", :input_html => {:style => 'width:7%', :id => "publiclyfundedteaching", :value => '0', :onkeyup => "myFunction()"} %>
<%= f.input :non_publicly_funded_teaching, :label => "Non-Publicly Funded teaching (NPFT)", :input_html => {:style => 'width:7%', :id => "non_publicly_funded_teaching", :value => '0', :onkeyup => "myFunction()"} %>
и контроллер
def create
@submission = Submission.new(submission_params)
@email = @submission.email
puts @email
if @submission.save
flash[:notice] = 'Your user was successfully created.'
else
@staffform = Form.find(10000)
@livestatus = @staffform.status
puts @staffform.status
puts "not saved"
puts @submission.errors.full_messages
render :new
end
И модель:
validates :firstname, presence: true
validates :surname, presence: true
validates :email, presence: true
validates :total, numericality: { only_integer: true, equal_to: 100}
# First group
validates :publiclyfundedteaching, numericality: { only_integer: true }
validates :non_publicly_funded_teaching, numericality: { only_integer: true }
validates :support_for_teaching, numericality: { only_integer: true }
Проблема заключается в следующем: publiclyfundedteaching, non_publicly_funded_teaching и support_for_teaching для полей обучения не сохраняют там значения после проверки. Адрес электронной почты, фамилия и имя соответствуют.
Пожалуйста, посоветуйте, как я могу обойти это. Я предполагаю, что это как-то связано с атрибутом value в этих полях?
Очень признателен!!
Комментарии:
1. Не могли бы вы рассказать нам, как выглядит submission_params перед созданием новой записи? Опция
only_integer: true
проверяет поле на соответствие регулярному выражению /A [ -]?d z/ Обратите внимание, что «2» будет соответствовать, а «2.0» — нет.2. Спасибо за ответ см. Комментарий ниже
Ответ №1:
Посмотрите, как у вас есть :value => '0'
поля формы для обоих :publiclyfundedteaching
и :non_publicly_funded_teaching
(третье, которое вы упомянули, отсутствует в вашей форме). Они установят значение в полях равным 0, даже если вы перезагрузите ранее заполненную форму. Вы можете либо удалить это, либо попытаться добавить статус if следующим образом (при условии, что представление является моделью):
<%= f.input :publiclyfundedteaching, label: "Publicly funded teaching (PFT)", input_html: { style: 'width:7%', id: "publiclyfundedteaching", value: @submission.publiclyfundedteaching || 0, onkeyup: "myFunction()" } %>
Комментарии:
1. Большое спасибо, Клара. Очень признателен. Именно то, что мне нужно
2. Добро пожаловать, я был бы рад, если вы сможете принять мой ответ!
Ответ №2:
У submission_params
вас, вероятно, есть что-то вроде:
def submission_params
params.require(:your_model_name).permit(:firstname, :surname, :email)
end
это удаляет все другие поля, чтобы защитить их от подделки данных клиентом
если вы хотите, чтобы поле было доступно для записи — добавьте его в разрешенное
Комментарии:
1. Большое спасибо! Вероятно, я неправильно объяснил проблему. по сути, когда проверка запускается с отображением сообщений об ошибках формы, значения полей для :firstname, : фамилия, :email все еще присутствуют, но мы потеряли другие значения, которые пользователь ввел для числовых полей. возможно из-за атрибута value, изначально связанного с этими полями.