Ruby on Rails - я не могу отправить форму - 400 плохих запросов - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь отправить форму в Ruby on Rails, но при попытке отправить я получаю следующую ошибку:

Started POST "/newsletters" for 127.0.0.1 at 2018-05-02 14:26:33 -0300
Processing by NewslettersController#create as JS
Parameters: {"utf8"=>"✓"}
[1m[35m (0.2ms)[0m  BEGIN
[1m[36m (0.4ms)[0m  [1mROLLBACK[0m
Rendered text template (0.0ms)
Completed 400 Bad Request in 14ms (Views: 0.7ms | ActiveRecord: 0.6ms)

Форма имеет только одно поле (электронное письмо), и я уже проверил его в своей модели. В чем дело? Почему 400 плохих запросов? Кто-нибудь может помочь мне?

newsletter_mailer.rb

class NewsletterMailer < ActionMailer::Base
  default from: "no-reply@facens.br"

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

newsletters_controller.rb

class NewslettersController < ApplicationController
  def create
    @newsletter = Newsletter.new(params[:newsletters])
    if @newsletter.save
      NewsletterMailer.delay_for(1.seconds, retry: true).create(@newsletter)
      render nothing: true, status: 200
    else
      render nothing: true, status: 400
    end
  end
end

form.html.erb

<%= form_for(Newsletter.new, remote: true, html: { multipart: true }, html: {class:"fc_liga__footer--form clearfix"}) do |f| %>
  <div class="input_group">
    <input type="text" id="contact[email]" placeholder="Digite o seu e-mail">
    <button type="submit" class="btn btn_orange"><%= svg "send_newsletter" %></button>
  </div>
<% end %>

1 Ответ

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

Ваши параметры не включают :newsletters, видите?

Parameters: {"utf8"=>"✓"}

Итак, @newsletter.save - это false, и вы получите ошибку 400, как вы указали:

class NewslettersController < ApplicationController
  def create
    @newsletter = Newsletter.new(params[:newsletters])
    if @newsletter.save
      NewsletterMailer.delay_for(1.seconds, retry: true).create(@newsletter)
      render nothing: true, status: 200
    else
      render nothing: true, status: 400
    end
  end
end

У вас нет params[:newsletters], потому что ваша форма искажена:

<%= form_for(Newsletter.new, remote: true, html: { multipart: true }, html: {class:"fc_liga__footer--form clearfix"}) do |f| %>
  <div class="input_group">
    <input type="text" id="contact[email]" placeholder="Digite o seu e-mail">
    <button type="submit" class="btn btn_orange"><%= svg "send_newsletter" %></button>
  </div>
<% end %>

Вы не должны вручную создавать ввод, вы должны использовать вместо него помощник по вводу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...