Ruby on rails 客户端验证未加载

Ruby on rails 客户端验证未加载,ruby-on-rails,client-side-validation,Ruby On Rails,Client Side Validation,我正在遵循rails cast 263的客户端估值。我已经准备好了代码,尽管它并没有为我实时验证错误。错误仅在提交表单后显示 application.html.erb: <%= stylesheet_link_tag "application", :media => "all" %> <%= javascript_include_tag "application" %> <%= javascript_include_tag :defaults, "

我正在遵循rails cast 263的客户端估值。我已经准备好了代码,尽管它并没有为我实时验证错误。错误仅在提交表单后显示

application.html.erb:

  <%= stylesheet_link_tag "application", :media => "all" %>
  <%= javascript_include_tag "application" %>
  <%= javascript_include_tag :defaults, "rails.validations" %>
  <%= csrf_meta_tags %>
<%= form_for @user, :validate => true do |f| %>
  <% if @user.errors.any? %>
    <div class="error_messages">
      <h2>Form is invalid</h2>
      <ul>
        <% @user.errors.full_messages.each do |message| %>
          <li><%= message %></li>
        <% end %>
      </ul>
    </div>
  <% end %>

    <div class="field">
        <%= f.label :email %><br/>
        <%= f.text_field :email %>
    </div>
    <div class="field">
        <%= f.label :password %><br/>
        <%= f.password_field :password %>
    </div>
    <div class="field">
        <%= f.label :username %><br/>
        <%= f.text_field :username %>
    <div class="field">
        <%= f.label :zip_code %><br/>
        <%= f.text_field :zip_code %>
    </div>
    </div>

原始建议:在application.JS中链接到JS。

而不是从
application.html.erb
链接到
rails.validations.js

<%= javascript_include_tag :defaults, "rails.validations" %>
这就是我连接到其他JavaScript文件的方式

我对Rails 2不太了解,但我认为Rails 3发生了变化,现在使用
application.html.erb
链接到
application.js
,然后所有其他js文件都从那里链接到。它看起来像是
:默认值可能无法像以前那样工作。RailsCasts非常有帮助,但几年前创建的一些剧集的代码示例在Rails的最新版本中发生了更改

编辑1:确保rails.validations.js已安装到app/assets/javascripts中。

在RailsCast中,
rails g client\u side\u validations:install
命令将
rails.validations.js
放入项目中。显然,这并不总是有效的,您可以调用
railsg客户端验证:copy\u assets
将其放入
app/assets/javascripts
(请参阅:)

编辑2:在Rails 4中,修复兼容性错误。

看起来客户端验证在Rails 4中不起作用,并且gem不再维护(请参阅:)

在Rails 3中,在
action\u view\helpers\form\u helper.rb
中,
apply\u form\u for\u选项方法是:

def apply_form_for_options!(object_or_array, options)
在Rails 4中,它是:

def apply_form_for_options!(record, object, options)
如果查看客户端验证代码,其版本为:

def apply_form_for_options!(object_or_array, options)
  super
  options[:html][:validate] = true if options[:validate]
end
这与Rails 3的定义相匹配。我们只得到了两个参数,但是我们调用了
super
,因为Rails 4需要三个参数

如果你觉得勇敢,你可以通过客户端验证来解决这些Rails-4兼容性问题。但我怀疑可能有很多东西需要更新,因为这个gem必须与FormHelper紧密集成


很抱歉,这不能立即解决您的问题。祝你好运

当您关闭定义了验证的字段时,rails.validation.js中的客户端验证JavaScript代码应该启动。如果您在浏览器中调试JS,则
executeValidates=function(context)
firming?@cschroed中的代码是否正在启动?@cschroed当我查看页面源时,我实际获得了一个
加载资源失败:服务器响应状态为404(未找到)
。来自链接。这可能是原因吗?是的,这似乎是问题的开始。我已经提出了一个替代方案,但不起作用<代码>[Error]引用错误:找不到变量:jQuery(匿名函数)(rails.validations.js,第5行)
这意味着我们现在连接到rails.validations.js,但它不知道jQuery是什么。您的应用程序中是否安装了
gem'jqueryrails'
?在
application.js
中是否有
/=requirejquery
?是的,我还有一件事要检查:在
/=require rails.validations
行上方列出的
/=require jquery
行吗?是的。我将application.js文件添加到POST中,以便您可以看到我的内容。我确实遇到了一个错误,
在加载页面时找不到文件“rails.validations”
def apply_form_for_options!(object_or_array, options)
def apply_form_for_options!(record, object, options)
def apply_form_for_options!(object_or_array, options)
  super
  options[:html][:validate] = true if options[:validate]
end