Я получаю cancan с devise, подключенным к моему первому приложению Ruby on Rails. У меня кое-что из этого работает, но я столкнулся с проблемой, которую мой мозг новичка не может понять.

Я пытаюсь удалить модель проекта. Вызов cancan capacity.initialize не работает, потому что пользователь передается как nil, хотя я вошел в систему и другие вызовы успешно авторизуют

В моем представлении шоу у меня есть эта ссылка:

<%= link_to "Purge this project", @project, method: :delete, data: {confirm: "There is no way to get it back. Are you sure you want to permanently remove this project?"} %>

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

class ProjectsController < ApplicationController
  load_and_authorize_resource
  ...
  def destroy
    puts "***********removing: " + params.inspect 
    @project.destroy
    ...
  end

Моя инициализация cancan делает это:

  def initialize(user)
    user ||= User.new # guest user
    puts "********  Evaluating cancan permissions for: " + user.inspect
    ...

Когда я нажимаю ссылку удаления выше, это помещается в консоль (обратите внимание, что user.id равен нулю, это вызвано тем, что я настраиваю гостя, если пользователь равен нулю)

********  Evaluating cancan permissions for: #<User id: nil, email: ""...
Started DELETE "/projects/16" for 127.0.0.1 at 2013-04-04 10:48:23 -0400
Processing by ProjectsController#destroy as HTML
  Parameters: {"id"=>"16"}
WARNING: Can't verify CSRF token authenticity

ПРОБЛЕМА: Почему пользователь равен нулю ??? Связано ли это с проблемой токена CSRF? Есть ли что-то особенное в http method = delete, которое мне не хватает? Как мне остановить тупого, больно?

Предыдущее действие "show" дало ожидаемые путы (заключительные моменты должны быть достаточно подключены):

********  Evaluating cancan permissions for: #<User id: 2, email: "doug...

Благодарность!

0
Doug 4 Апр 2013 в 19:31

1 ответ

Лучший ответ

Самоответчик предупреждение! Итак, я предполагаю, что действия удаления должны происходить в сообщении формы, чтобы идентификация и материал CSRF обрабатывались правильно?!?

Заменив мою ссылку на форму, все снова заработало:

<%= form_for @project, :method => :delete do  %>   
  <%= submit_tag "Purge this project", confirm: "Are you sure you want to permanently remove this project?" %> 
<% end %>
0
Doug 4 Апр 2013 в 22:00