为什么不在我的js.erb文件中工作的链接

时间:2012-02-15 02:51:16

标签: javascript ruby-on-rails ruby ruby-on-rails-3 erb

我在js.erb文件中有这个

var cart_item = "<table id='something' style='width:100%'>"; 
cart_item += "<tr><td>";
cart_item += "<%= @contact.name %>";
cart_item += "<%= link_to_remote 'Delete', :url => {:controller => 'registrations', :action => 'destroy' %>";
cart_item += "</td>";
cart_item += "</tr></table>";

$("#cart").append(cart_item);

它只是挂起但是当我注释掉link_to_funtion时,一切都很好。我甚至试图让它成为一个link_to,它仍然挂起并且什么都不做......我错过了什么

2 个答案:

答案 0 :(得分:3)

将所有内容提取为部分内容,将其称为_cart_item.html.erb

<table id='something' style='width:100%'>
<tr><td>
<%= @contact.name %>
<%= link_to 'Delete', {:controller => 'registrations', :action => 'destroy', :id => @contact.id}, :remote => true %>
</td>
</tr></table>

然后,您的js.erb文件将如下所示:

$("#cart").append(<%= escape_javascript(render(:partial => "cart_item")) %>);

但Ryan Bigg仍然是对的,你应该:

  • 使用RESTful路由和路由助手。
  • 正如我所做的那样,使用:remote => true进行AJAX请求。
  • 确保您将id传递给destroy操作,以便知道要销毁的对象。

答案 1 :(得分:2)

四件事。

一:不需要:url选项。您可以将哈希作为第二个参数传递给link_to_remote,它将起作用。

二:您应该使用URL帮助程序。此外,如果您使用destroy操作,则可能需要传递ID。这意味着你会做这样的事情:

link_to_remote 'Delete', registration_path(id)

你会为此做resources :registrations之类的事情。虽然,不确定您的应用程序中 的注册内容,但我真的可以就此提出建议。

三:最重要的是,你错过了link_to_remote行哈希的结束花括号。如果你把它遗漏,这会引发语法错误。

四:link_to_remote在Rails 3.0中已弃用。您应该使用link_to 'Delete', registration_path(id), :remote => true