控制器动作未通过Javascript调用

时间:2013-05-12 04:47:58

标签: javascript jquery ruby-on-rails ruby

我有控制器动作:

def delete_image
@pictureup = Pictureup.find(params[:id])

@pictureup.remove_image!

respond_to do |format|
  format.html { redirect_to root_url, notice: "Bild wurde gelöscht." }
  format.json { head :no_content }
end
rescue ActiveRecord::RecordNotFound
    redirect_to root_url, notice: "Bild gelöscht."
end

路线:

  match "delete_image/:id" => "pictureups#delete_image", :as => 'delete_img'

一个工作生成的链接,只要我点击它自己:

<a href="/delete_image/157931" data-confirm="Are you sure?" id="alert">Delete</a>

如果我尝试做

jQuery(document).ready(function() {
 jQuery('#alert').click();
});

显示数据确认对话框,但未调用控制器操作(无重定向,无&#34; image_delete&#34;)

任何想法为什么?如果我在我的控制器中使用其中一个CRUD操作尝试它,它的工作没有问题。

2 个答案:

答案 0 :(得分:0)

您的:confirm link_to会在呈现页面时将data-confirm放入链接中。这导致Rail的jQuery-ujs将Javascript confirm绑定到链接。如果您检查jQuery-ujs源代码,您会看到如果confirm成功,则会将隐藏的表单提交给link_to中的URL。

因此,最简单的方法是删除:confirm并自己在jQuery中完成所有操作。对于常规的“点击链接”,您可以将自己的confirm绑定到click并在确认成功时调用另一个函数。如果您想使用jQuery进行删除,只需调用直接的第二个功能。

答案 1 :(得分:0)

好的修好了。

更改了路线:

  resources :pictureups do
   member do
    delete :delete_image
   end
  end

更改了视图:

<%= link_to "Delete", delete_image_pictureup_path(@pictureup), method: :delete, :id=>"delete_img" %>

和JS:

jQuery('#delete_img').click();

所以它似乎与路由和调用动词有关。