我想在任何可用于出借/出售的pin显示页面上创建一个按钮,当点击该按钮时,会向pin的所有者发送一封电子邮件,让他们知道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中的所有代码都运行良好。
答案 0 :(得分:2)
其他人在另一个网站上为我回答了这个问题,我是以错误的方式解决这个问题。这是代码:
...
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
...
class UserMailer < ActionMailer::Base
default :from => "ian@ctrl-r.com"
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
...
<%= link_to "Request Contact", sendrequest_pin_path(current_user, @pin), class: "btn btn-primary" %>
...
...
resources :pins do
resources :loans
member do
match 'sendrequest' => 'pins#sendrequest'
end
end
...
答案 1 :(得分: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:
})
})
})
希望有所帮助