【问题标题】:Rails, user input persist when showing activerecord error messageRails,显示activerecord错误消息时用户输入持续存在
【发布时间】:2014-11-16 00:51:24
【问题描述】:

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

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

我的预期行为:当用户给出名字而不是姓氏时,它会显示错误消息,并且名字会保留在文本字段中。谢谢

【问题讨论】:

  • 你能在你运行验证的地方显示你的控制器代码吗?
  • controller上没什么,验证主要来自model
  • 您能否添加您的控制器,以便我们可以看到正在调用的信息操作。这将是问题所在。
  • 我唯一的想法是您的控制器可能没有正确填充@student 对象。否则,当您返回“新”页面时,信息应该会保留。

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


【解决方案1】:

如果您有通往 snew 的路线

你应该这样做

def information
    @student = Student.new(check_new_student_params)
    if @student.save
       #redirect to other page
    else
      render 'new'
    end
end

您不是在告诉 rails 在出错后恢复表单。当然,您的控制器中应该有一个new 操作。

【讨论】:

    【解决方案2】:

    这就是您的问题所在。您尝试创建对象而不是分配和尝试保存。保存失败后,您应该再次渲染页面

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      • 2014-09-24
      • 1970-01-01
      • 2018-03-10
      • 2021-06-01
      • 1970-01-01
      相关资源
      最近更新 更多