Почему в моем файле js.erb нет ссылки на работу? - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть это в моем файле 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 ]

3 голосов
/ 15 февраля 2012

Извлеките все это в частичное, назовите его _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")) %>);

Но Райан Биггвсе еще прав, вы должны:

  • использовать маршруты RESTful и помощники маршрутов.
  • использовать :remote => true для запросов AJAX, как я это сделал.
  • makeуверен, что вы передаете id действию destroy, чтобы он знал, какой объект нужно уничтожить.
2 голосов
/ 15 февраля 2012

Четыре вещи.

Один: нет необходимости в опции :url.Вы можете просто передать хэш в качестве второго аргумента link_to_remote, и он будет работать.

Два: для этого вы должны использовать помощники URL.Кроме того, если вы используете действие destroy, вы, вероятно, захотите пройти через id.Это означает, что вместо этого вы бы сделали что-то вроде этого:

link_to_remote 'Delete', registration_path(id)

Для этого вы будете делать что-то вроде resources :registrations.Хотя я не уверен, какие регистрации являются в вашем приложении, поэтому я действительно могу посоветовать вам по этому поводу.1016 * строка.Это вызовет синтаксическую ошибку, если вы ее опустите.

Четыре: link_to_remote устарела в Rails 3.0.Вы должны использовать link_to 'Delete', registration_path(id), :remote => true

...