2016-01-22 4 views
0

У меня возникла проблема с Rails 4 и удалением нескольких элементов в базе данных.ActionController :: InvalidAuthenticityToken on delete form Rails 4

Я работаю над созданием почтового ящика электронной почты, и я хотел бы переместить элемент в «корзину мусора», после чего я хочу перенаправить пользователя на страницу мусора, где он может удалить элемент из базы данных.

Мой код:

routes.rb

namespace :admin do 
    resources :inboxes do 
    collection do 
     match 'destroy_multiple' => 'inboxes#destroy_multiple', via: ['post','delete'] 
     get 'sent' 
     get 'trash' 
    end 
    end 
end 

контроллер:

def destroy_multiple 
    if params[:action] == 'trash' 
    @del = Inbox.where(:id => params[:delete]).destroy_all 
    else 
    @del = Inbox.where(:id => params[:delete]).update_all(:folder =>'trash') 
    end 
    redirect_to admin_inboxes_path 
end 

И, наконец, моя форма (тонкая):

= form_tag destroy_multiple_admin_inboxes_path, method: :delete, class: "multiple_delete" do 
    input type="hidden" name="action" value = controller.action_name 
    - @inboxes.each do |msg| 
    - @username = msg.email.gsub(/([^.]+)@.+/, '\1').gsub(/[^0-9A-Za-z]/, ' ').split.map(&:capitalize).join(' ') 
    tr class=(msg.read == 1 ? nil : 'unread') 
     td.inbox-small-cells 
     label.checkbox-custom.check-success 
      = check_box_tag "delete[]", msg.id, false, class: "for_del", id: "delete_#{msg.id}" 
      label for="delete_#{msg.id}" 
     td.inbox-small-cells 
     i.fa.fa-star.inbox-started 
     td 
     a.avatar href="/fr/admin/inboxes/#{msg.id}" 
      span.bg-primary [email protected][0] 
     td.view-message.dont-show = @username 
     td.view-message = msg.subject 
     td.view-message.inbox-small-cells 
     td.view-message.text-right = msg.created_at.strftime("%d/%m") 

я могу с этим код успешно перемещает почту в «мусор», но я не могу удалить их из базы данных.

Спасибо!

+1

Что вы подразумеваете под "невозможным"? –

+0

Есть ли какие-либо обновления о статусе этого? – Dbz

ответ

0

Вам необходимо добавить аутентификацию в Вашу форму. Попробуйте:

form_tag destroy_multiple_admin_inboxes_path, method: :delete, class: "multiple_delete", authenticity_token: true do 

Если вы работаете с конкретным активным объектом звукозаписывающей используйте form_for вместо form_tag, а поле CSRF автоматически будет построен в виде по рельсам. Однако это подходящее время для использования form_tag.

Альтернативное решение заключается в изменении конфигурации config.action_view.embed_authenticity_token_in_remote_forms в false, но это сделает ваш сайт более безопасным, и это лучше просто добавить authenticity_token: true к вашему form_tag.

Here is the documentation on form_tag

+0

привет, спасибо за ваш ответ, но это то же самое, у меня есть одно сообщение с «authenticity_token» по форме или нет. Но это странно, потому что, если я перехожу к корзине и напрямую перехожу в корзину для удаления элементов, это не работает, но если я обновляю страницу мусора и повторно отправляю форму, элементы успешно удаляются, и у меня нет ошибки сообщение. – Shinix

+0

Добавление 'authenticity_token: true' не имело эффекта? Это верно? – Dbz

+0

Да! no effect – Shinix

Смежные вопросы