我有一个名为/add
的页面,您可以添加Dog
,表单位于其自身的部分内容中。我正在使用Simple Form和Twitter Bootstrap。我添加了主引导程序的文件,但只是use a gem for simple_form to work with it,所以你知道。
DogsController
# 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 } %>
是for bootstrap所以它正确地呈现错误html。
PagesController
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="#">×</a>
<%= f.error_notification %>
</div>
<% end %>
答案 0 :(得分:2)
您不必进行客户端验证。但是,应该通过js禁用提交按钮,直到满足客户端验证为止。 我也不会删除new.html.erb而不是客户端。已经打开了js。 我认为您的添加可能需要format.js添加和 remote = true到您的共享错误部分调用
答案 1 :(得分:2)
通过我们提到的聊天,您还有一个create.js.erb,该文件正在清除表单。
使create.js与new.js.erb相同: $(“#generate-form”)。html(“&lt;%= escape_javascript(render(:partial =&gt;'dogs / form',locals:{dog:@dog}))%&gt;”);
让它发挥作用。