Ruby on Rails - Action Mailer 400 Плохой запрос - PullRequest
0 голосов
/ 17 мая 2018

При попытке отправить форму с помощью Ruby on Rails 4.1 и Action Mailer возникает следующая ошибка:

Started POST "/contact_sponsors" for 127.0.0.1 at 2018-05-17 16:22:35 -0300
Processing by ContactSponsorsController#create as JS
  Parameters: {"utf8"=>"✓", "contact_sponsor"=>{"company_name"=>"godocu@mailinator.com", "company_cnpj"=>"dahok@mailinator.com", "company_cep"=>"watyhib@mailinator.com", "company_address"=>"dofimocah@mailinator.com", "company_number"=>"duki@mailinator.com", "company_existence"=>"mamopiwir@mailinator.net", "company_sponsor_type"=>"", "responsible_name"=>"qomukuf@mailinator.com", "responsible_email"=>"ryhohiqe@mailinator.net", "additional_infos"=>"Eum sit nesciunt occaecat facere delectus vel aut sint animi pariatur Ut ipsum officia ratione est enim est"}}
  HomeConfig Load (4.1ms)  SELECT  `home_configs`.* FROM `home_configs`   ORDER BY `home_configs`.`id` ASC LIMIT 1
   (0.2ms)  BEGIN
   (0.4ms)  ROLLBACK
  Rendered text template (0.0ms)
Completed 400 Bad Request in 16ms (Views: 0.8ms | ActiveRecord: 4.8ms)

Кто-нибудь может мне помочь? Я пытался разобраться во многом, но безрезультатно. Вот мой контроллер, почтовик и модель:

class ContactSponsorsController < InheritedResources::Base
  def create
    @contact_sponsor = ContactSponsor.new
    if @contact_sponsor.save
      ContactSponsorMailer.delay_for(10.seconds, retry: true).create(@contact_sponsor)
      render nothing: true, status: 200
    else
      render nothing: true, status: 400
    end
  end
end

class ContactSponsorMailer < ActionMailer::Base
  default from: "Facens Lince <no-reply@facens.br>"

  def create(contact_sponsor)
    @contact_sponsor = contact_sponsor
    mail(to: "felipe.marcon@atua.ag", subject: "Contato Através do Site")
  end
end

class ContactSponsor < ActiveRecord::Base
  validates :company_cnpj, :company_address, :company_number, :company_size, :company_existence, :company_sponsor_type, :responsible_name, :responsible_email, presence: true
end

Спасибо.

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

В соответствии с показанными журналами и общим фрагментом кода, кажется, что атрибут «company_sponsor_type» выглядит как пустая строка, и в модели вы записали истинное присутствие того же атрибута, и, таким образом, он откатывается.

Поэтому удалите проверку или отправьте какое-либо значение в ключе company_sponsor_type.

0 голосов
/ 18 мая 2018

Посмотрите, в ContactSponsor у вас есть validate те данные, которые должны присутствовать, но вы не передали никаких данных, которые означают пустые, поэтому

Выполнено 400 неверных запросов

и для этого вам нужно создать приватный метод для strong parameters посмотрите на это ниже

class ContactSponsorsController < InheritedResources::Base
    def create
        @contact_sponsor = ContactSponsor.new(contact_sponsor_params)
        if @contact_sponsor.save
            ContactSponsorMailer.delay_for(10.seconds, retry: true).create(@contact_sponsor)
            render nothing: true, status: 200
        else
            render nothing: true, status: 400
        end
    end

    private

    def contact_sponsor_params
        params.require(:contact_sponsor).permit(:company_cnpj, :company_address, :company_number, :company_size, :company_existence, :company_sponsor_type, :responsible_name, :responsible_email)
    end
end

Я думаю, что это будет работать.

0 голосов
/ 17 мая 2018

@contact_sponsor.save вернул false, поэтому он возвращает 400. Проверьте ошибки, которые у вас были с @contact_sponsor.errors.full_messages, когда он возвращает ложь, или используйте save!, чтобы вызвать исключение (не рекомендуется, используйте его только для отладки) и посмотрите, чтопошло не так.

...