I want one user to be able to send an email to another user by clicking a button. They will receive an auto generated email saying 'You have been challenged by [user]!' So on a view there will be a drop down menu to select from the list of users, and then a 'challenge' button which will send this email to that user. I already have mailer set up that sends a registration email.
Here's the email:
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
</head>
<body>
<h1>You have been challeneged by, <%= @opponent.student_name %>.</h1>
</body>
</html>
Here's my usermailer.rb (my users are called 'student')
def welcome(student)
@student = student
mail(:to => student.email, :subject => "Welcome to the DIT Judo club!")
end
def challenge(student, opponent)
@student = student
@opponent = opponent
mail(:to => student.email, :subject => "You have been challeneged to a Judo match!")
end
end
Here's the config mailer stuff in case you want to see it:
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings ={
:enable_starttls_auto => true,
:address => 'smtp.gmail.com',
:port => 587,
:domain => 'smtp.gmail.com',
:authentication => :plain,
:user_name => 'xxxxx',
:password => 'xxxxxx'
}
So basically in a view I want to have a drop down where the current user(student) selects another user(student) and then you can click submit to trigger the challenge email. I'm new to rails can someone help me do it?
Here's my feeble attempt:
In the routes folder:
get 'challenge', :to=>'usermailer#challenge'
resources :matches do
put :challenge
end
In my index:
<div>
Challenge another student to a match!
<div class="field">
<%= f.label :opponent %><br>
<%= f.collection_select :opponent, Student.all, :id, :student_name %>
</div>
<%= link_to 'challenge', match challenge_path([current studentID ??], [opponent from collection]), method: :put %>
</div>
Your
welcome
andchallenge
methods are just creating and returning a mail object. You need to calldeliver
on the mail object to actually send it. See "Calling the Mailer" in the documentation for more details.