自定义重定向后设计错误消息

时间:2014-09-08 09:07:20

标签: forms validation ruby-on-rails-4 devise

我有自定义重定向到我的设计注册表单,我有两个表单,一个用于个人,另一个用于公司。我在注册控制器的创建操作中添加了这个:

if resource.company_form
    redirect_to new_user_registration_path(company: true)    
  else  
    redirect_to new_user_registration_path
  end

在执行此操作时虽然我丢失了所有设计错误消息,因为在不显示任何验证错误,所以我需要发送错误消息以及重定向,不是吗?但是,我不确定如何。

到目前为止,我已尝试将错误消息打印到控制台:

ap(resource.errors.full_messages)

[
 [0] "Email can't be blank",
 [1] "Password can't be blank",
 [2] "Company name can't be blank"
]

鉴于此:

ap(resource.errors)

@messages={:email=>["can't be blank"], :password=>["can't be blank"], :company_name=>["can't be blank"]}

如何将错误消息再次显示在表单上方?

2 个答案:

答案 0 :(得分:1)

设计错误消息的神奇之处在于使用了respond_with方法。

因此,您可以更改response_with块的redirect_to

respond_with(resource) do |format|
  if resource.company_form
    format.html { render 'new', locals: { is_organisation: true } }
  else  
    format.html { render 'new' }
  end
end

并在您的视图中

<% params[:organisation] ||= is_organisation -%>

答案 1 :(得分:0)

不确定是否有帮助,但是您可以根据消息进一步自定义。首先要确保实际工作是一个好主意。然后进一步对其进行自定义。

  1. 将您的敬酒宝石添加到您的gemfile中。

gem 'toastr-rails', '~> 1.0'

  1. 在您的application.js中,您需要添加//= require toastr

  2. 在您的stylesheet.scss中,您将需要导入toastr @import "toastr";

  3. 然后在您的终端上运行bundle

在views / devise / registrations /文件夹和views/devise/password/文件夹中,其中的页面是显示错误消息的devise视图。您将在此处找到通过设计产生的错误消息。 <%= devise_error_messages! %>

因此,您想要做的就是自定义这些消息。

现在转到视图/共享并创建一个新文件,并将其命名为_devisemes.html.erb

<% unless resource.errors.empty? %>
  <script type="text/javascript">
   <% resource.errors.full_messages.each do |value| %>
     toastr.error('<%= value %>')
   <% end %>
  </script>
<% end %>

保存此文件之后。只需转到以下文件并找到

<%= devise_error_messages! %>

在以下以下文件中用 <%= render 'shared/devisemes' %> 替换它:

views/devise/registrations/edit.html.erb

views/devise/registrations/new.html.erb

views/devise/password/new.html.erb

views/devise/password/edit.html.erb

现在注销并创建一个没有电子邮件或密码的帐户并进行测试。您会注意到来自设计的所有错误消息都与toastr一起出现。