如何使用Rails respond_with创建动作和JavaScript?

时间:2011-10-21 09:49:45

标签: ruby-on-rails ajax

我一直在阅读有关respond_with的内容。并且在之前的几个教程中使用过它,但我并不认为我完全理解它。

我现在尝试实现的功能是:我有一个类文章项目列表,每个项目都有一个指向创建收藏夹操作的链接。当用户点击它时,它会创建最喜欢的实例,并将用户重定向到主页。我希望这可以在没有页面刷新的情况下使用AJAX,并在文章项目上执行一些JavaScript,让用户知道它已成功受到青睐。我用过:remote =>相关链接中的true属性,因此操作远程执行没有问题,但我对如何执行动作的.js.erb文件有点困惑。

我在控制器中完成了以下操作:

class FavouritesController < ApplicationController
before_filter :authenticate
respond_to :html, :js


  def create
    @article = Article.find_by_id(params[:article_id])
    current_user.Favourites.create(:article => @article)
    redirect_to root_path 
  end

问题是,我不知道应该将什么参数传递给respond_with。我已经尝试用respond_with @article和没有参数的respond_with替换重定向,虽然它们都工作(调用create.js.erb),但我不明白为什么......

我不想'response_with'任何东西,但只有当通过javascript执行动作时,才会调用create.js.erb。任何人都可以解释a)无论如何,无论我传递给它还是为什么做出反应,以及b)这样做的正确方法是什么?

BTW,我正在使用Rails 3.0

编辑:如果我在下面的代码中使用respond_to,我会更好理解,但我想更好地理解respond_with。

respond_to do |format|
  format.html { redirect_to root_path }
  format.js
end

2 个答案:

答案 0 :(得分:0)

我试图解决类似问题多次遇到这个问题。事实证明,我的控制器并没有像我认为的那样从内容类型或者它是xhr请求的事实推断格式。

无论如何,当我从这里切换时它起作用了:

contacts_path

对此:

contacts_path format: :json

我本身并不关心,所以我改变了我的ajax调用以包含像这样的dataType选项(per jQuery ajax documentation):

$.ajax({url: contactUrl, type: 'POST', data: data, dataType: 'json' });

答案 1 :(得分:-1)

您好Oalo通过下面的链接,它简明扼要地解释了respond_with和respond_to。它列出了您可以传递给respond_with

的所有选项

http://ryandaigle.com/articles/2009/8/6/what-s-new-in-edge-rails-cleaner-restful-controllers-w-respond_with

希望这能回答您的问题