我正在尝试实现类似Stack Overflow上的投票系统。 (使用Rails 3)我希望在没有页面重新加载的情况下完成投票,所以我有这个代码
link_to("/tags/#{tag.id}/upVote", :remote => true )
所以在我的/ views / tags目录中,我有一个名为_upVote.js.erb的文件,我认为在单击此链接时会调用该文件,但事实并非如此。它试图将upVote作为HTML处理,这是我得到的错误
缺少模板标签/ upVote与{:formats => [:html]
此外,这是我在路线文件中的内容
match "tags/:id/upVote" => "tags#upVote"
我有什么想法可以让它发挥作用吗?
答案 0 :(得分:6)
如果您在空白的新页面中收到此错误消息,则表示您的远程调用不起作用,并且未通过Ajax请求进行调用。您需要检查您的布局是否正确加载了jQuery和jQuery Rails连接器:http://github.com/rails/jquery-ujs
然后使用Firefox + Firebug检查该调用是否真的是一个Ajax调用。
答案 1 :(得分:2)
我有同样的问题。 为了解决这个问题,我跟着
最后,我不得不
Require both jquery and jquery_ujs were in the application.js manifest.
//= require jquery
//= require jquery_ujs
毕竟,Rails ajax开始为我工作。
答案 2 :(得分:1)
请参阅此帖子了解解决方案:
Rails form_for :remote=>true is not calling js method
将rails环境更改为JQuery时,您可能会意外丢失jquery-ujs文件。
答案 3 :(得分:0)
在rails应用程序根目录中键入类似内容:
<?php
require_once 'controller.php';
require_once 'view.php';
require_once 'model.php';
$view = new View();
$controller = new Controller($view);
if (isset($_GET) && !empty($_GET)) {
$controller->get($_GET);
}
$view->output();
然后,在rails g jquery:install
内添加行
application.html.erb
或明确(不要忘记单独包含您的jquery):
<%= javascript_include_tag :defaults %>
[编辑:使用资产管道的Rails 3.1或更高版本]
使用<%= javascript_include_tag :rails, :application %>
(如上所述)并将以下行添加到 app / assets / javascripts / application.js (如果它们不存在):
gem jquery-rails
希望这有帮助!