email - How to exclude guest users from getting emailed Rails 4 Devise -
just set first mailer on rails 4. have welcome email sent new users sign (create) new account using devise.
i have devise set if current_user not found, guest user created. unfortunately, interfering mailer. every time guest account created, mailer send email non-existing email.
i having trouble figuring out how exclude guests mailer.
user.rb:
after_create :send_welcome_mail def send_welcome_mail usermailer.welcome_email(self).deliver end
mailers/user_mailer.rb:
class usermailer < actionmailer::base default from: "example@gmail.com" def welcome_email(user) @user = user mail(:to => user.email, :subject => "welcome!") end end
application_controller.rb (guest creation):
def current_or_guest_user if current_user if session[:guest_user_id] && session[:guest_user_id] != current_user.id logging_in guest_user(with_retry = false).try(:destroy) session[:guest_user_id] = nil end current_user else guest_user end end # find guest_user object associated current session, # creating 1 needed def guest_user(with_retry = true) # cache value first time it's gotten. @cached_guest_user ||= user.find(session[:guest_user_id] ||= create_guest_user.id) rescue activerecord::recordnotfound # if session[:guest_user_id] invalid session[:guest_user_id] = nil guest_user if with_retry end private # called (once) when user logs in, insert code application needs # hand off guest_user current_user. def logging_in # example: # guest_comments = guest_user.comments.all # guest_comments.each |comment| # comment.user_id = current_user.id # comment.save! # end end def create_guest_user u = user.create(:name => "guest", :email => "guest_#{time.now.to_i}#{rand(100)}@example.com") u.save!(:validate => false) session[:guest_user_id] = u.id u end
i'm sure easy, still new rails , bit confused on best way go this. let me know if need other code.
def welcome_email(user) # following line unnecessary. normally, # when want make variable # available view #@user = user # can make if more explicit writing # if user.id == nil, if return false in # ruby if value doesn't exist (i.e. nil) if user.id mail(:to => user.email, :subject => "welcome!") end end
Comments
Post a Comment