目前,我在模型上有文本字段和一些验证。但是,当我显示错误消息时,用户插入的所有数据都将消失。我想显示错误消息+要保留的数据。这是代码:
<% if @student.errors.any? %>
<div id="validation_error" class="alert alert-danger" role="alert">
<ul>
<% @student.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= form_for(:user_student, :url => {:controller => 'profile', :action => 'information'}) do |f| %>
<%= f.text_field :first_name, :value => @student.first_name, class: "form-control" , :placeholder => "First Name" %>
<%= f.text_field :last_name, :value => @student.last_name, class: "form-control" , :placeholder => "Last Name" %>
<% end %>
class Student < ActiveRecord::Base
validates :first_name, :presence => true
validates :last_name, :presence => true
end
已更新 控制器:
def information
@student = Student.create(check_new_student_params)
if @student.save
#redirect to other page
end
end
def check_new_student_params
params.require(:user_student).permit(:first_name, :last_name)
end
我的预期行为:当用户提供名字但不是姓氏时,它将显示错误消息,并且文本字段上的第一个名称仍然存在。感谢
答案 0 :(得分:0)
这是您的问题所在。您尝试创建对象而不是分配并尝试保存。保存失败后,您应该再次呈现页面
def information
@student = Student.new(check_new_student_params)
if @student.save
#redirect to other page
else
render original page again
end
end
def check_new_student_params
params.require(:user_student).permit(:first_name, :last_name)
end
答案 1 :(得分:0)
如果您有到new
你应该这样做
def information
@student = Student.new(check_new_student_params)
if @student.save
#redirect to other page
else
render 'new'
end
end
你没有告诉rails在错误后带回来。当然,您应该在控制器中执行new
操作。