Rails3.1.0rc4とclient_side_validations3.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') %>");
次に、フォームが送信されると、検証がサーバー側に適用されます。
私が欠けているものはありますか?