Rails 3 - link_to:delete正在重定向以显示安装了jquery的操作

时间:2011-08-03 22:44:14

标签: jquery ruby-on-rails

我正在尝试创建几个链接来执行自定义控制器方法或销毁操作。我通过jquery-rails gem使用jquery并运行了生成器,似乎包括正确:

<script type="text/javascript" src="/javascripts/jquery.js?1312255663">
<script type="text/javascript" src="/javascripts/rails.js?1312407526">
<script type="text/javascript" src="/javascripts/jquery.min.js?1312255664">
<script type="text/javascript" src="/javascripts/application.js?1312256996">

以下是使用以下链接的示例:method =&gt; :删除:

<%= link_to "Delete", list_path(@list), :method => :delete, :confirm => "Are you sure?" %>

使用我的routes.rb:

resources :lists

我想也许问题可能出在我的控制器方法上,但我仍然不明白为什么它会渲染show动作,这是我对上面链接/控制器的破坏方法。

def destroy
    @list = current_user.lists.find(params[:id])
    @list.active = false
    @list.save

    if @list.save
      redirect_to root_path, :notice => "List '#{@list.name}' deleted."
    else
      render :action => 'edit'
    end
  end

我是否有任何明显的遗漏,尤其是jquery,因为很多人似乎都有同样的问题。

4 个答案:

答案 0 :(得分:2)

我不确定该问题是否与jquery有关,但我建议将link_to替换为button_tolink_to也应该有效,但button_to是“确保导致数据更改的链接最安全的方法,不会被搜索机器人或加速器触发”(来源:Rails API文档)

答案 1 :(得分:2)

如果你可以把你所做的和你的问题中发生的事情放在哪里,这将有助于大大地诊断正在发生的事情。

一些诊断步骤:

  1. 验证/javascripts/rails.js处的文件是否正在加载您所期望的文件(请在浏览器中查看)。
  2. 确保在单击删除链接时获得预期的确认对话框。
  3. 检查您的日志文件(tail -f your_app/logs/development.log);确保您看到对相应路径的DELETE请求,并且它正在路由到相应的控制器操作。
  4. 删除对@list.save的第一次调用,只留下一个作为条件的一部分。
  5. 检查列表对象上的updated_at时间戳是否正在更改。

答案 2 :(得分:0)

我认为你的问题的答案是jQuery混淆了:method =&gt; :删除link_to。您可能知道,如果您不指定:method =&gt; :删除,然后根据REST,您将被重定向到show动作。我打赌(99,9%)这就是发生的事情。 原因:没有请求DELETE这样的东西,只有GET和POST。 Rails做了一个删除它的技巧(我想通过插入_method = delete,如果我没记错的话)

答案 3 :(得分:0)

引用使用新Rails应用程序生成的rails.js:RAILS.JS,并包含所有不显眼的处理程序。但是,它依赖于PROTOTYPE,所以如果你想依赖jQuery,请使用以下代替!!不能同时使用他们的冲突!参考:http://www.simonecarletti.com/blog/2010/06/unobtrusive-javascript-in-rails-3 = 使用 javascript_include_tag'jquery_ujs.js' 不要使用: / = javascript_include_tag'rails.js' / = javascript_include_tag'jrails.js'“正式过时” 当然,对于资产管道,您可以使用主应用程序.js文件并引用所有其他文件 javascript_include_tag'applications.js'