我正在使用 Rails 3.1.0rc4 和 client_side_validations 3.1.0。只要表单在主请求中呈现,一切都会完美运行。但是,如果表单本身是通过 javascript 添加到页面的,那么提交表单会导致服务器端验证。我怀疑问题是当表单通过javascript添加到页面时,我需要以某种方式将客户端验证功能“绑定”到它。
例如,假设我有一个简单的表单,您可以在其中发布新的工作列表:
#jobs/new.html.erb
<%= form_for [@job], :validate => true do |f| %>
<%= render :partial => 'common/form_errors', :locals => {:record => @job} %>
<div class="field">
<%= f.label :title %>
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :description %>
<%= f.text_field :description %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
以及我的模型中的以下验证:
class Job < ActiveRecord::Base
validates_presence_of :title, :description
end
如果我通过访问浏览器中的 new_job_path 来访问此表单,我的客户端验证工作得很好。
但是,如果我将此表单插入另一个页面(例如 jobs_path 索引页面),如下所示:
#jobs/index.html.erb
<%= render @jobs %>
<div id="form-job-new"> </div>
<%= link_to 'New Job', new_job_path, :remote =>true %>
和:
#jobs/new.js.erb
$('#form-job-new').append("<%= escape_javascript render(:file => 'jobs/new.html.erb') %>");
然后在提交表单时,将在服务器端应用验证。
知道我错过了什么吗?