2013-04-07 3 views
0

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

Я создал всю электронную почту и смог отправить ее, чтобы отправить электронное письмо по загрузке , но я хочу, чтобы он отправлялся только при нажатии кнопки. Это похоже на то, что я должен заставить кнопку загружать страницу, которая отправляет электронное письмо и отображает подтверждение. Проблема, с которой я сталкиваюсь, заключается в передаче переменных @pin и current_user на страницу.

Я иду об этом в правильном направлении, или я ухожу? Любая помощь очень ценится!

Вот как я открываю страницу отправки/подтверждения:

<%= button_tag(:type => 'button', class: "btn btn-primary", onclick: "window.location.href='/sendrequest'") do %> 
<%= content_tag(:strong, 'Request Contact') %> 
<% end %> 

А вот то, что мне нужно выполнить на этой странице:

<% if user_signed_in? %> 
<% UserMailer.request_pin(@users, @pin).deliver %> 
<p> 
Your request has been sent! 
</p> 
<% else %> 
... 
<% end %> 

Весь код в UserMailer.request_pin работает нормально.

ответ

2

Кто-то ответил это для меня на другой сайт, я собирался об этом в неправильном направлении. Вот код:

/app/controllers/pins_controller.rb:

... 
def sendrequest 
    @user = current_user 
    @pin = Pin.find(params[:id]) #The culprit! 
    if user_signed_in? 
    UserMailer.request_pin(current_user, @pin).deliver 
    redirect_to @pin, notice: 'Request for contact sent.' 
    else 
    end 
end 
... 

/app/mailer/user_mailer.rb:

class UserMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    def request_pin(user, pin) 
    @user = user 
    @pin = pin 
    mail(:to => "#{@pin.user.name} <#{@pin.user.email}>", :replyto => @user.email, :subject => "#{@user.name} has requested #{@pin.description}") 
    end 
end 

/app/pins/show.html. Еврорадио:

... 
<%= link_to "Request Contact", sendrequest_pin_path(current_user, @pin), class: "btn btn-primary" %> 
... 

/config/routes.rb:

... 
resources :pins do 
    resources :loans 
    member do 
    match 'sendrequest' => 'pins#sendrequest' 
    end 
end 
... 
0

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

Я не знаю вашего кода базы у всех так это са грубый пример

# Routs file 
get "/pins/:id/post" => "pins#notify", as: notify_pin_owner 

# Controller 
def notify 
@pin = Pin.find(params[:id]) 
<% if user_signed_in? %> 
<% UserMailer.request_pin(@users, @pin).deliver %> 
<p> 
Your request has been sent! 
</p> 
<% else %> 
... 
<% end %> 
end 

# View 
<%= link_to "notify", "#", data-link: notify_pin_owner_path(@pin), class: 'pin-notification' %> 

# In javascript 
$(document).ready(function() { 
    $('.pin-notification').click(function() { 
    $.ajax({ 
     type: "GET", 
     url: $(this).data('link'), 
     success: 
    }) 
    }) 
}) 

Надежда, что помогает

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