client_side_validations不起作用 - validations-hash总是为空:(

时间:2012-05-16 17:53:20

标签: ruby-on-rails client-side-validation

我真的不知道我做错了什么。我在宝石的3-1稳定分支上。不知道这是一个错误还是我的愚蠢。 client_side_validations只是无法识别我的验证。

这是我的代码:

# model models/fan.rb
class Fan < ActiveRecord::Base
  validates_presence_of :email, :name
  validates_uniqueness_of :email
end

# initializer initializers/client_side_validations.rb
ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
  unless html_tag =~ /^<label/
    %{<div class="field_with_errors">#{html_tag}<label for="#{instance.send(:tag_id)}"                 class="message">#{instance.error_message.first}</label></div>}.html_safe
  else
    %{<div class="field_with_errors">#{html_tag}</div>}.html_safe
  end
end

# view fans/new.haml
= form_for @fan, validate: true do |f|
    = f.text_field 'name'
    = f.email_field 'email'
    = f.submit

# application.js
//= require jquery
//= require rails.validations

# gemfile
gem 'aws-sdk'
gem 'aws-s3', :require => 'aws/s3'
gem 'client_side_validations', git: 'https://github.com/bcardarella/client_side_validations.git', branch: '3-1-stable'
gem 'coffee-filter'
gem 'devise'
gem 'draper'
gem 'haml'
gem 'haml-rails'
gem 'heroku'
gem 'jquery-rails'
gem 'paperclip', '~> 3.0'
gem 'paperclip-meta', :git => "git://github.com/dce/paperclip-meta.git"
gem 'rails', '~> 3.2.3'
gem 'thin'

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'coffee-rails', '~> 3.2.2'
  gem 'sass-rails',   '~> 3.2.5'
  gem 'uglifier'
end

group :production do
  gem 'pg'
end

group :development, :test do
  gem 'awesome_print'
  gem 'powder'
  gem 'sqlite3'
  gem 'sprite-factory'
end

我可以提交表格(我不应该提交)。验证工作(rails让我回到预期的消息)。 我尝试通过扫描gem-code来调试它,我发现在每个具有验证的表单之后插入了一个脚本标记。 我的问题是窗口[form.id] .validators总是空的。

我使用普通的表单构建器。我试图删除所有其他脚本/样式/ html,直到我只有表单和所需的javascripts(jquery和rails.validations),但它只是不起作用。

非常感谢任何帮助:(

3 个答案:

答案 0 :(得分:0)

这适合我。

<%= form_for @merchants_list, :url => {:controller => 'merchants_lists', :action => 'create'},:html => {:id => "merchants_details_form",:multipart => true},:validate => true do |f| %>

答案 1 :(得分:0)

如果您正在使用client_side_validation gem建议您在Gemfile中的client_side_validation之前编写Jquery_rails。 C_S_V gem使用Jquery Ajax进行验证。 别无他法。它是一个令人敬畏的宝石,尽管小的probs ..

答案 2 :(得分:0)

我有类似的问题-client_side_validations无法正常工作,并且验证器哈希为空。当我尝试将<%= f.validate%>添加到表单中时,它开始工作(并且所有验证器都在哈希中),但是如果没有它,它应该可以工作。所以最后我发现创建输入时必须使用:symbol表示法。例如。 f.input "name"不起作用,但f.input :name起作用,并且它的验证程序最终被自动加载。