AnA*_*ice 3 ruby-on-rails devise ruby-on-rails-3
我正在努力构建一个rails 3 + devise,用户注册页面.这将是一个额外的页面,不会取代现有的设计注册页面.此页面将包含用户信息和结算信息.
我正在尝试提交表单,如果表单字段不保存,则重新加载的页面包含用户先前输入的数据.这里是一个片段:
<%= form_for(User.new, :url => '/pricing/sign_up') do |f| %>
<%= f.label :email %>
<%= f.email_field :email %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
当表单提交无效数据时.当视图重新渲染时,输入的现有电子邮件不会保留.如何使现有用户的输入保持不变,以帮助用户快速纠正错误并提交有效表单?
谢谢
关键是要form_for使用正确的对象.所以,而不是
<%= form_for(User.new, :url => '/pricing/sign_up') do |f| %>
Run Code Online (Sandbox Code Playgroud)
你应该使用实例变量来包含对象,就像这样
<%= form_for(@user, :url => '/pricing/sign_up') do |f| %>
Run Code Online (Sandbox Code Playgroud)
控制器操作如下所示:
# 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
Run Code Online (Sandbox Code Playgroud)
这个create方法正在做的是@user用表单中的params 填充对象.然后调用@user.savewill,在幕后调用@user.valid?,如果没有返回错误,则将记录保存到数据库中.但这部分是关键.如果@user.valid?确实导致错误,则将@user填充错误集合.然后,在render :new完成并重新呈现您的用户表单后,表单将能够通过访问@user.errors集合来吐出错误消息.否则,就像以前一样,你总是User.new在表单中有一个永远不会有任何错误的对象,因为它之前从未用于尝试记录验证.
如何在表单中显示错误是一个偏好问题,有点超出了这个问题的范围.这是一个指南:http://guides.rubyonrails.org/active_record_validations.html#displaying-validation-errors-in-views
| 归档时间: |
|
| 查看次数: |
2617 次 |
| 最近记录: |