ruby-on-rails - 如何将 Rails respond_with 与创建操作和 javascript 一起使用?

标签 ruby-on-rails ajax

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

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

我在 Controller 中完成了以下操作:

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),但我不明白为什么......

我不想“respond_with”任何东西,但只有当通过 javascript 执行操作时,create.js.erb 才会被调用。任何人都可以解释 a) 为什么无论我传递给它什么 respond_with 都会工作,以及 b) 什么是正确的方法来做到这一点?

顺便说一句,我正在使用 Rails 3.0

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

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

最佳答案

为了解决类似的问题,我多次遇到这个问题。事实证明,我的 Controller 并没有像我假设的那样从内容类型或它是一个 xhr 请求的事实中推断出格式。

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

contacts_path

对此:

contacts_path format: :json

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

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

关于ruby-on-rails - 如何将 Rails respond_with 与创建操作和 javascript 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7847682/

相关文章:

ruby-on-rails - 如何在 Shopify 公共(public)应用程序中添加 JavaScript

jquery - 我的 jQuery UI 自动完成功能不起作用?

javascript - 如何在同一页面中将 jQuery 变量发布到 PHP?

javascript - PHP Ajax 仅加载新内容

jquery - 地理定位和 jQuery - 无法使用 ajax 发布结果

ruby-on-rails - 同一工厂的多个版本(FactoryGirl)

ruby-on-rails - 用should测试多个关联,应该属于使用外键

jquery - 如何在鼠标悬停后缓存 AJAX 内容

ruby-on-rails - 在 jenkins 服务器上设置 git 私有(private)存储库项目

ruby-on-rails - 如果今天显示 Rails created_at?