Rails:link_to with:remote =>真的不行

时间:2010-10-29 05:30:04

标签: ruby-on-rails

我正在尝试实现类似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"

我有什么想法可以让它发挥作用吗?

4 个答案:

答案 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

希望这有帮助!