Ruby on rails 客户端验证未加载
我正在遵循rails cast 263的客户端估值。我已经准备好了代码,尽管它并没有为我实时验证错误。错误仅在提交表单后显示 application.html.erb: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, "
<%= 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