我正在努力构建一个 Rails 3 + 设计用户注册页面。这将是一个附加页面,不会替换现有的设备注册页面。此页面将包含用户信息和帐单信息。
我试图让表单提交,如果表单字段没有保存,重新加载的页面包含用户以前输入的数据。这是一个片段:
<%= form_for(User.new, :url => '/pricing/sign_up') do |f| %>
<%= f.label :email %>
<%= f.email_field :email %>
<% end %>
当表单提交无效数据时。当 View 重新呈现时,输入的现有电子邮件不会保留。如何让现有用户的输入持久化以帮助用户快速更正错误并提交有效表单?
最佳答案
关键是要有form_for
使用正确的对象。所以,而不是
<%= form_for(User.new, :url => '/pricing/sign_up') do |f| %>
你应该使用一个实例变量来包含对象,像这样
<%= form_for(@user, :url => '/pricing/sign_up') do |f| %>
Controller Action 如下所示:
# Note: this may need to be an `edit` method instead?
def new
@user = User.new
end
# Note: this may need to be an `update` method instead?
def create
@user = User.new(params[:user])
if @user.save
# Do something... Usually a redirect with success message.
else
render :new
end
end
这个 create 方法正在做的是填充
@user
带有表单参数的对象。然后调用 @user.save
将在幕后调用 @user.valid?
并且,如果没有返回错误,则记录被保存到数据库中。但这部分是关键。如 @user.valid?
确实会导致错误,然后是 @user
上的错误集合将被填充。然后,在 render :new
之后完成并重新呈现您的用户表单,该表单将能够通过访问 @user.errors
来吐出错误消息。收藏。否则,按照你以前的方式,你总是有一个 User.new
永远不会有任何错误的表单中的对象,因为它以前从未用于尝试记录验证。如何在表单中显示错误是一个偏好问题,有点超出了这个问题的范围。这是一个指南:http://guides.rubyonrails.org/active_record_validations.html#displaying-validation-errors-in-views
关于ruby-on-rails - 如何获取使用无效数据提交的 Rails 表单以重新填充用户输入的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18562935/