Я получаю 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...
Благодарность!
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 %>
Похожие вопросы
Новые вопросы
ruby-on-rails-3
Ruby on Rails - это фреймворк для веб-разработки с открытым исходным кодом, написанный на Ruby. Ruby on Rails следует принципу соглашения о конфигурации, освобождая вас от необходимости заново изобретать вещи, чтобы оставаться продуктивными. Используйте этот тег только для вопросов, касающихся Rails 3, а также пометьте эти вопросы [ruby-on-rails].