рельсы 3 - link_to уничтожить не работает - PullRequest
37 голосов
/ 05 января 2011

Я пытаюсь создать ссылку уничтожения для моего контроллера пользователя, я также использую devise.

Вот мой код -

Просмотр

<%= link_to 'Delete User?', child, :confirm => "Are you sure you want to delete #{child.full_name}?", :method => :delete, :class => "user-additional", :style => "font-size:12px;font-weight:normal;" %>

Контроллер

def destroy
 if @user = User.find(params[:id])
  @user.destroy
  respond_to do |format| 
    format.html { redirect_to account_index_path } 
    format.xml { head :ok } 
  end
 end
end

Маршруты

devise_for :users 
resources :users, :except => [:new]

Ссылка преобразуется в localhost: 3000 / users / 10

При щелчке по нему открывается отображение пользователей вместо их удаления

Есть идеи?

Ответы [ 9 ]

64 голосов
/ 05 января 2011

Разрушительные действия должны выполняться как отправка формы - http://www.w3.org/2001/tag/doc/whenToUseGet.html#checklist

используйте button_to (передавая :method => :delete) взамен и стилизуйте кнопку соответствующим образом.

27 голосов
/ 05 января 2011

На самом деле у меня вчера была точно такая же проблема

Попробуйте это:

<%= button_to "delete", your_object, :method=>:delete, :class=>:destroy %>

Работает (по крайней мере для меня)

9 голосов
/ 05 января 2011

В случае, если вы используете jQuery вместо Prototype, вам, вероятно, не хватает файла javascript.

Подробную информацию о том, как добавить его в свой проект, можно найти на странице jquery-ujs GitHub или в эпизоде ​​205 Railscasts.

6 голосов
/ 05 января 2011

По-моему, это так, потому что в Rails 3 ненавязчивый javascript теперь используется для такой функциональности, как эта (Rails 2 выдает кучу неприятных встроенных javascript для вашего кода, Rails 3 помещает javascript во внешний файли использует атрибуты HTML5 data- для взаимодействия с этим.)

Чтобы решить эту проблему, вам нужно включить <%= csrf_meta_tags %> в заголовок страницы, чтобы ссылаться на внешний JavaScript.Также рассматриваются проблемы XSS.

Некоторые подробности здесь: Ссылка «Удалить» отправляет «Get» вместо «Delete» в представлении Rails 3

1 голос
/ 07 июля 2015

работал для меня с сообщением подтверждения.

<%= button_to 'Destroy', {action: :destroy, id: version.id},  onclick: 'return confirm("Are you sure?")', method: :delete %>
1 голос
/ 28 марта 2014

Также, если вы столкнулись с этой проблемой в производственном режиме, это может быть связано с тем, что вы не скомпилировали ресурсы. Смотри http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

1 голос
/ 21 марта 2014

Если вы не включили jquery и jquery-ujs в свое приложение, стандартное link_to по умолчанию, поставляемое с scaffold, работать не будет!

У меня была та же проблема. Она была решена после включения обоих этих js!

1 голос
/ 26 ноября 2012
  1. выполните действия, описанные в установочной части rails / jquery-ujs
  2. добавьте <% = javascript_include_tag "application"%> в файле макета.
1 голос
/ 01 марта 2012

Если вы используете jQuery, убедитесь, что у вас есть что-то вроде этого:

<script type="text/javascript">
  // this allows jquery to be called along with scriptaculous and YUI without any conflicts
  // the only difference is all jquery functions should be called with $j instead of $
  // e.g. $jQ('#div_id').stuff instead of $('#div_id').stuff
  var $jQ = jQuery.noConflict();
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...