我是Rails的新手,并且已经在这个问题上苦苦挣扎了好几个小时 - 非常感谢任何帮助。
我在Bootstrap模式中有一个注册表单(使用Devise和simple_form),并希望在提交表单时在同一模式中显示错误通知。目前,当提交表单时出现错误,页面会重定向到/ users,并在那里呈现错误。当表单提交没有错误时,页面将保留在主页上并根据需要显示“成功”Flash消息。
我不知道这个问题是否是由控制器/路由问题引起的,我是否需要(首先学习)添加jQuery / Javascript / Ajax或其他东西。
模态代码(包含在部分内容中)
<div id="signupModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="signupLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="signupLabel">Sign up</h3>
</div>
<div class="modal-body">
<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), html: {class: "form-horizontal"}) do |f| %>
<%= f.error_notification %>
<%= f.input :name,
placeholder: 'John Smith',
input_html: {class: 'span7'} %>
...
<div class="form-actions">
<%= f.submit "Sign up", class: "btn btn-large btn-success" %>
</div>
<% end %>
</div>
</div>
application_helper.rb - 在阅读this之后添加了此代码。问题
module ApplicationHelper
def resource_name
:user
end
def resource
@resource ||= User.new
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
end
答案 0 :(得分:8)
您应该在表单中添加:remote => true
,这会导致表单通过Ajax提交。然后,您需要将控制器修改为respond_to
format.js。它应该尝试保存记录。如果有错误,则应回复create.js.erb
,其中包含以下内容:
$("#errors_div").html("<%= @resource.errors.full_messages %>")
答案 1 :(得分:0)
如果你看一下simple_form的内幕,你会看到它添加了一些新的css'错误'类,并在其中添加了错误消息,基于评估@ model.errors数组的结果。
我不相信该表单旨在通过ajax完成提交时处理错误消息显示。我认为你的选择是:
我从选项#1开始,因为它有点简单。