クライアント側の検証には client-side-validation gem とその simple_form プラグインを使用します。含まれているカスタムモデルがあり、ActiveModel::Validations
それを埋めるために simple_form を使用しています。
<%= simple_form_for @solution, :validate => true, :url => solve_problem_path, :html => { :class => 'form-horizontal' } do |f| %>
<% @solution.fields.each do |label| %>
<%= f.input label, :validate => { :presence => true } %>
<% end %>
<div class="form-actions">
<%= f.submit 'Solve', :class => 'btn btn-primary' %>
</div>
<% end %>
カスタムモデル:
class Solution < OpenStruct
include ActiveModel::Validations
validate do
@table.each do |key, val|
errors.add(key, :blank) if val.blank?
end
end
def fields
@table.keys
end
end
ただし、クライアント側の検証は機能しません (サーバー側は機能します)。