我正在尝试创建几个链接来执行自定义控制器方法或销毁操作。我通过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,因为很多人似乎都有同样的问题。
答案 0 :(得分:2)
我不确定该问题是否与jquery有关,但我建议将link_to
替换为button_to
。 link_to
也应该有效,但button_to
是“确保导致数据更改的链接最安全的方法,不会被搜索机器人或加速器触发”(来源:Rails API文档)
答案 1 :(得分:2)
如果你可以把你所做的和你的问题中发生的事情放在哪里,这将有助于大大地诊断正在发生的事情。
一些诊断步骤:
/javascripts/rails.js
处的文件是否正在加载您所期望的文件(请在浏览器中查看)。 tail -f your_app/logs/development.log
);确保您看到对相应路径的DELETE请求,并且它正在路由到相应的控制器操作。@list.save
的第一次调用,只留下一个作为条件的一部分。 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'