Rails,用户输入在显示activerecord错误消息时仍然存在

时间:2014-11-16 00:51:25

标签: ruby-on-rails ruby rails-activerecord

目前,我在模型上有文本字段和一些验证。但是,当我显示错误消息时,用户插入的所有数据都将消失。我想显示错误消息+要保留的数据。这是代码:

<% 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

我的预期行为:当用户提供名字但不是姓氏时,它将显示错误消息,并且文本字段上的第一个名称仍然存在。感谢

2 个答案:

答案 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操作。