gpt4 book ai didi

ruby-on-rails - Rails 3 中的 Ajax 错误处理

转载 作者:行者123 更新时间:2023-12-03 20:26:13 24 4
gpt4 key购买 nike

我正在创建一个简单的演示应用程序,允许用户输入他们的电子邮件地址来注册他们对接收测试版访问的兴趣。然后应用程序会向他们发送一封确认电子邮件,让他们知道我们已收到他们的请求。如果您曾经注册过 Beta 版发布通知,那么您就会明白。

我很好奇如何在使用 AJAX 时处理 Rails 3 中的错误。在实现我的 respond_to 块之前,我有一个呈现部分共享错误的表单。

这是表格。

<% if flash[:notice] %>
<p><%= flash[:notice] %></p>
<% end %>

<p>Sign up to be notified when the beta launches.</p>

<%= form_for @user, :remote => true do |form| %>

<%= render '/shared/errors', :target => @user %>

<%= form.label :email, "Your Email Address" %>
<%= form.text_field :email %>

<%= form.submit "Notify Me" %>
<% end %>

这是上述错误部分。
<% if target.errors.any? %>

<ul>
<% target.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>

<% end %>

很标准的东西。 Controller Action 如下所示。
def create
@user = User.new(params[:user])

respond_to do |format|
if @user.save
format.html { redirect_to :back, flash[:notice] = "Thanks for your interest! We'll let you know when the app is in beta." }
format.js
else
format.html { render :action => :new }
format.js
end
end
end

在实现ajax之前一切正常。如果表单通过验证,那么他们会看到成功的闪现消息,如果没有,他们会看到一个错误列表。所以现在我有一个 create.js.erb 文件我应该如何处理错误而不重复我自己或者是不可能的。我显然希望尽可能保持干燥。

最佳答案

您仍然可以为 js.erb 文件中的所有 .js 错误呈现共享部分。

<% if @user.errors.any? %>
var el = $('#create_user_form');
// Create a list of errors
<%= render :partial=>'js_errors', :locals=>{:target=> @user} %>
<% else %>
$('#users_list').append("<%= escape_javascript(render :partial=>"users/show", :locals=>{:user => @user }) %>");
// Clear form
el.find('input:text,textarea').val('');
el.find('.validation-errors').empty();
<% end %>

你的部分可能看起来像(假设 jquery):
  <% target.errors.full_messages.each do |error| %>
var errors = $('<ul />');
errors.append('<li><%= escape_javascript( error ) %></li>');
<% end %>

但还有另一种选择……它甚至是 DRYer。

http://www.alfajango.com/blog/rails-3-remote-links-and-forms/

如果您正在使用 Rails 3 中的 ajax,本指南确实是理解响应和 ajax 呈现的最佳指南。

我完成了本指南并在评论中发布了如何实际使用 HTML 部分来处理 HTML 和 AJAX 请求响应。我是偶然做的,然后跟进了如何做。

享受!

您实际上可以像以前一样直接返回带有响应的 html。

这是简短的版本:
def create
@something = Somethng.new(params[:something])
if @something.save
respond_with( @something, :status => :created, :location => @something ) do |format|
format.html do
if request.xhr?
render :partial => "something/show", :locals => { :billable => @billable }, :layout => false
end
end
end
else
respond_with( @something.errors, :status => :unprocessable_entity ) do |format|
format.html do
if request.xhr?
render :partial => "something/new", :locals => { :something => @something }, :layout => false
else
render :action => :new
end
end
end
end
end

关于ruby-on-rails - Rails 3 中的 Ajax 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5306380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com