Ответ 1
Деструктивные действия должны выполняться как представление формы - http://www.w3.org/2001/tag/doc/whenToUseGet.html#checklist
используйте button_to
(передавая :method => :delete
) и соответствующим образом нарисуйте кнопку.
Я пытаюсь создать ссылку destroy для моего контроллера пользователей, я также использую 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
При нажатии этой кнопки открывается вместо того, чтобы удалять их.
Любые идеи?
Деструктивные действия должны выполняться как представление формы - http://www.w3.org/2001/tag/doc/whenToUseGet.html#checklist
используйте button_to
(передавая :method => :delete
) и соответствующим образом нарисуйте кнопку.
На самом деле у меня вчера была точно такая же проблема.
Попробуйте следующее:
<%= button_to "delete", your_object, :method=>:delete, :class=>:destroy %>
Он работает (по крайней мере для меня)
Если вы используете jQuery вместо Prototype, вам, вероятно, не хватает файла javascript.
Вы можете найти подробную информацию о том, как добавить его в свой проект на странице jquery-ujs GitHub или из эпизод 205 Railscasts.
Думаю, это связано с тем, что в Rails 3 ненавязчивый javascript теперь используется для таких функций, как это (Rails 2 выводит кучу неприятного встроенного javascript для вашего кода, Rails 3 помещает javascript во внешний файл, и использует атрибуты HTML5 data-
для взаимодействия с этим.)
Чтобы решить эту проблему, вам нужно включить <%= csrf_meta_tags %>
в свой заголовок страницы, чтобы ссылаться на внешний javascript. Он также занимается вопросами XSS.
Некоторые подробности здесь: Удалить ссылки отправляет "Получить" вместо "Удалить" в представлении Rails 3
Если вы используете 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>
Если вы не включили jQuery и jquery-ujs в ваше приложение, по умолчанию ссылка link_to по умолчанию с scaffold не работает!
У меня была такая же проблема. Он был решен после включения обоих этих js!
Также, если вы получите эту проблему в режиме производства, возможно, это связано с тем, что вы не скомпилировали активы. См. http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets
Работала для меня с подтверждением.
<%= button_to 'Destroy', {action: :destroy, id: version.id}, onclick: 'return confirm("Are you sure?")', method: :delete %>