2013-11-11 3 views
2

Как создать delete link_to в приложении Rails?Как создать ссылку для удаления

Голосов контроллер

class VotesController < ApplicationController 

    def destroy 
     @user = User.find(params[:id]) 
     @user.votes.pluck(:author_uid).delete(current_user.uid) 
    end 

end 

Маршруты

votes_path  GET  /votes(.:format)    votes#index 
       POST /votes(.:format)    votes#create 
new_vote_path GET  /votes/new(.:format)   votes#new 
edit_vote_path GET  /votes/:id/edit(.:format) votes#edit 
vote_path  GET  /votes/:id(.:format)   votes#show 
PATCH     /votes/:id(.:format)   votes#update 
PUT      /votes/:id(.:format)   votes#update 
DELETE     /votes/:id(.:format)   votes#destroy 

То, что я должен написать в link_to в виду?

Я попытался

= link_to 'Delete vote', {controller: "votes", action: "destroy"}, method: "delete" 

и

= link_to 'Delete vote', vote_path(vote), method: :delete 

пользователей/index.html.haml

- @vk.friends.get(uid: current_user.uid, fields: fields) do |friend| 
    %td.span 
    .centred 
     .image 
     .circled 
      = image_tag friend.photo_medium 
     %span= friend.uid 
     %span= link_to "#{friend.first_name} #{friend.last_name}", "http://vk.com/id#{friend.uid}", target: "_blank" 
     %span= define_age(friend) == '' ? define_sex(friend) : define_sex(friend) + ', ' + define_age(friend) 
     - if current_user.user_votes.pluck(:recipient_uid).include?(friend.uid) 
     = link_to('Delete',{controller: :votes, id: vote.id, action: :destroy}, confirm: "Are you sure you want to delete ?", method: :delete) 
     - else 
     = link_to 'Vote', {controller: "votes", action: "create", uid: friend.uid}, method: "post", confirm: "You sure", class: 'button medium pink' 

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

Прокомментируйте, если вам нужна дополнительная информация.

Спасибо!

+0

Я считаю, что ваш второй пример должен работать. Что вы получаете вместо этого? Какой HTML он производит, и какой запрос происходит при нажатии ссылки? – Chowlett

+0

Выдает ошибку: неопределенная локальная переменная или метод 'vote 'для # <# <Класс: 0x331ec48>: 0x35c65b0> –

+0

Ah. Скорее всего, вы неправильно использовали 'vote', когда вы имеете в виду' @ vote', или аналогичный. Можете ли вы разместить код контроллера, который создает представление, содержащее это 'link_to'? – Chowlett

ответ

2

Ваш второй link_to прекрасно, синтаксически. Проблема в том, что vote не определен. Попробуйте следующее на ваш взгляд:

%span= define_age(friend) == '' ? define_sex(friend) : define_sex(friend) + ', ' + define_age(friend) 
    - vote = current_user.user_votes.find_by_recipient_uid(friend.uid).first 
    - if vote 
    = link_to('Delete', vote, confirm: "Are you sure you want to delete ?", method: :delete) 
    - else 
    = link_to 'Vote', {controller: "votes", action: "create", uid: friend.uid}, method: "post", confirm: "You sure", class: 'button medium pink' 

Вам также нужно будет разобраться в вашей уничтожить действие, как я отметил в комментариях к вашему вопросу; и ваши действия могут быть подозрительными аналогичным образом; Я не изучал его.

2

Попробуйте

= link_to('Delete', vote_path(vote.id),:method => :delete, :confirm => "Are you sure you want to delete?") 
OR  
= link_to('Delete',{controller: :votes, id: vote.id, action: :destroy}, confirm: "Are you sure you want to delete ?", method: :delete) 
+0

NameError неопределенная локальная переменная или метод 'vote 'для # <# <Класс: 0x331ec48>: 0x2fa98b8> –

+0

Показать свое мнение, откуда вы хотите удалить голос? – LHH

+0

Добавлен файл просмотра –

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