неопределенный метод `поставка 'для # с гемом 'mail_form' - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь загрузить этот драгоценный камень https://github.com/heartcombo/mail_form, и я получаю эту ошибку неопределенный метод `доставить 'для # В файле драгоценного камня

   gem 'mail_form'
    gem 'rails', '4.2.11.1'

В файле production.rb

config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address:              'smtp.gmail.com',
    port:                 587,
    domain:               'gmail.com',
    user_name:            'gmail email',
    password:             'gmail password',
    authentication:       'plain',
    enable_starttls_auto: true  }

В контроллере контактов

класс ContactsController

  def create
    @contact = Contact.new(contact_attributes)
      if @contact.deliver
      redirect_to new_contact_path, notice: "Thank you... Your Message was sent successfully."
      else
        flash.now[:error] = "Please correct the form"
        redirect_to new_contact_path
      end
  end

  def index
    @contact=Contact.all
  end

  private

  def contact_attributes
    contact_attributes = params.require(:contact).permit([:name,:email,:message,:phone])
  end
end

В new_contact_path

 <%= form_for @contact do |f| %>
                        <div class="col-sm-5 col-sm-offset-1">
                            <div class="form-group">
                                <label>Name *</label>
                                <%= f.text_field :name, class: "form-control" ,required: "required" %>
                            </div>
                            <div class="form-group">
                                <label>Email *</label>
                                <%= f.text_field :email, class: "form-control", required: "required" %>
                            </div>
                            <div class="form-group">
                                <label>Phone</label>
                                <%= f.text_field :phone, class: "form-control" %>
                            </div>                      
                        </div>
                        <div class="col-sm-5">
                            <div class="form-group">
                                <label>Message *</label>
                                <%= f.text_area :message , id: "message",  required: "required", class: "form-control" ,rows: "8" %></textarea>
                            </div>                      
                            <div class="form-group">
                                <%= f.submit "Submit Message"  %></button>
                            </div>
                        </div>
                        <% end %>

В файле контактной модели

      def headers
        {
          :subject => "My Contact Form",
          :to => "nourfiverr@gmail.com",
          :from => %("#{name}" <#{email}>)
        }
      end

1 Ответ

1 голос
/ 28 апреля 2020

Чтобы использовать mail_form gem, вам нужно создать другую модель, как в описании, или изменить существующую модель. Вы не можете использовать эти линии напрямую

contact_attributes = params.require(:contact).permit([:name,:email,:message,:phone])
@contact = Contact.new(contact_attributes)
@contact.deliver

поставить здесь ничего не значит для модели, подобной этой class Contact < ApplicationRecord, пока вы не сделаете свою модель контакта такой, как эта

class Contact < ActiveRecord::Base
  include MailForm::Delivery

  attributes :name, :email, :message, :form

  def headers
    {
      :subject => "My Contact Form",
      :to => "nourfiverr@gmail.com",
      :from => %("#{name}" <#{email}>)
    }
  end
end

, если вы этого не сделаете Чтобы внести эти изменения, просто следуйте инструкциям в файле readme для gems.

...