Отправка электронной почты в приложении Rails без использования модели базы данных - PullRequest
0 голосов
/ 03 октября 2018

Я относительно новичок в Rails.Я создал простое приложение с использованием Ruby 2.5 и Rails 5.2, которое будет отправлять электронное письмо администратору, когда посетитель веб-сайта запрашивает некоторую информацию.Приложение не использует базу данных, потому что никакая информация посетителя не должна быть сохранена или сохранена, поэтому ActiveRecord не используется.Просто нужно получить некоторую информацию от посетителя через форму и отправить ее по электронной почте.Исследования предлагают использовать ActiveModel вместо этого, но я до сих пор не могу заставить его работать.Не нужно никаких сторонних почтовых приложений.Что я пропускаю?Модель, Контроллер, Виды, Код почтового сообщения приведены ниже.

    #Model: Visitor.rb
    class Visitor
        include ActiveModel::Model
        include ActiveModel::Conversion
        extend ActiveModel::Naming
        include ActiveModel::Validations

        attr_accessor :fname, :lname, :phone, :email, :interest

        # Validations & Requirements
        validates :fname, presence: true, length: { maximum: 50 }
        validates :lname, presence: true, length: { maximum: 50 }
        validates :lname, presence: true, length: { maximum: 50 }
        VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
        validates :email, presence: true, length: { maximum: 255 }, format: { with: VALID_EMAIL_REGEX }
        validates :interest, presence: true

        def initialize(fname, lname, phone, email, interest)
            @fname = fname
            @lname = lname
            @phone = phone
            @email = email
            @interest = interest

            post_initialize
       end

       # #make in lieu of #create
       def self.make(fname, lname, phone, email, interest)
           attributes = {fname: fname, lname: lname, phone: phone, email: email, interest: interest}
           object = new(attributes)
           object.save
           @visitor = object
           @visitor
       end

      def persisted?
          false
      end

      def send_mail
          # Following method defined in NotifierMailer
          NotifierMailer.visitor_info(self).deliver_now
      end


      private

      def post_initialize
          if email
              email.downcase
          end
      end
    end

    # Controller: Visitors_controller.rb
    class VisitorsController < ApplicationController

        def new
            @Visitor = Visitor.new
        end

       def make
           @visitor = Visitor.new(visitor_params)
           if @visitor.valid?
               @visitor.send_mail # Instance method in Guest model
               flash[:notice] = "Your request has been sent! Thank you for contacting us."
               redirect_to welcome_path
           else
               render 'new'
           end
       end

       private

       def visitor_params
           params.require(:visitor).permit(:fname, :lname, :phone, :email, :interest)
       end
    end

    # Routes: Routes.rb
    Rails.application.routes.draw do
        get 'favicon', to: 'pages#favicon'

        root to: 'pages#index', as: 'welcome'

        # ... other routes for static page navigation

        get '/reqinfo', to: 'visitors#new'

        post '/reqinfo', to: 'visitors#make'
    end

    # View: New.html.erb
    <div class="row">
        <div class="col-md-6 col-md-offset-3">

            <%= form_with model: @visitor, url: reqinfo_path, local: true do |form| %>
                <%= render 'layouts/error_messages', object: form.object %>
                <%= form.label 'First Name' %>
                <%= form.text_field :fname, class: 'form-control' %>
                <%= form.label 'Last Name' %>
                <%= form.text_field :lname, class: 'form-control' %>
                <%= form.label :phone %>
                <%= form.text_field :phone, class: 'form-control' %>
                <%= form.label 'Email Address' %>
                <%= form.text_field :email, class: 'form-control' %>
                <%= form.label 'Interest' %>
                <%= form.text_field :interest, class 'form-control' %>
                <%= form.submit 'Submit', id: "button" %>
            <% end %><!-- form_with -->
        </div><!-- col-md6-3 -->
    </div><!-- row -->

     # Mailer: Notifier_mailer.rb
     class NotifierMailer < ApplicationMailer
         default from: 'noreply@thecompany.com'
         def guest_info(visitor)
             @visitor = visitor
             mail(to: 'admin@thecompany.com', subject: "Website Visitors Request for Information")
        end
     end

     # Message: Visitor_info.html.erb
     <h1>Dear Admin;</h1>
     <br>
     <% timestamp = Time.now %>
     <p>
         <%= visitor.fname %> <%= @visitor.lname %> visited the TheCompany website on <%= timestamp.localtime %>. He/she is requesting information regarding a <%= @visitor.interest %>. Their contact information phone: <%= @visitor.phone %> and email: <%= @visitor.email %>
     </p>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...