1

我有一个名为的页面/add,您可以添加一个页面Dog,并且表单是它自己的部分。我正在使用Simple FormTwitter Bootstrap。我添加了主 Bootstrap 的文件,但使用 gem for simple_form 来使用它,这样你就知道了。

狗控制器

# new.js.erb (deleted new.html.erb)

def new 
 @dog = Dog.new

 respond_to do |format|
  format.js
 end
end

# create.js.erb

def create 
  @dog = current_user.dogs.new(params[:dog])

  respond_to do |format|
    if @dog.save
      format.html { redirect_to add_url, notice: 'Dog was successfully added.' }
      format.json { render json: @dog, status: :created, location: @dog}
      format.js
    else
      format.html { render 'pages/add' }
      format.json { render json: @dog.errors, status: :unprocessable_entity }
    end
  end
end

狗/_form.html.erb

<%= simple_form_for(@dog, :remote => true) do |f| %>
  <%= render :partial => "shared/error_message", :locals => { :f => f } %>
    <%= f.input :name %>      
  <%= f.button :submit, 'Done' %>
<% end %>

这一行:<%= render :partial => "shared/error_message", :locals => { :f => f } %>

用于引导程序,因此它可以正确呈现错误 html。

页面控制器

def add

  respond_to do |format|
    format.html
  end
end

页面/add.html.erb

<div id="generate-form">
</div>          

狗/new.js.erb

$("#generate-form").html("<%= escape_javascript(render(:partial => 'dogs/form', locals: { dog: @dog })) %>");

现在我将如何让它呈现部分错误,就好像它仍然存在于我dogs/new.html.erb通过 AJAX 创建以来?我不需要客户端验证吗?


编辑

共享/_error_message.html.erb

<% if f.error_notification %>
   <div class="alert alert-error fade in">
     <a class="close" data-dismiss="alert" href="#">&times;</a>
     <%= f.error_notification %>
   </div>
<% end %>
4

2 回答 2

2

您不必进行客户端验证。但是应该,通常通过 js 禁用提交按钮,直到满足客户端验证。我也不会删除 new.html.erb 以防客户端没有打开 js。我认为您的 add 可能需要 format.js 到您的 add 和 remote = true 到您的共享错误部分调用

于 2012-06-19T21:39:43.103 回答
2

通过我们的聊天,您提到您还有一个 create.js.erb 并且该文件正在清除表单。

使 create.js 与 new.js.erb 相同: $("#generate-form").html("<%= escape_javascript(render(:partial => 'dogs/form', locals: { dog: @dog })) %>");

让它工作。

于 2012-06-20T03:21:22.210 回答