[英]Ruby on Rails - I can't send a form - 400 Bad Request
I'm trying send a form in Ruby on Rails, but when try send I get the following error: 我正在尝试在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)
The form has just one field (email) and I already validate it in my model. 该表单只有一个字段(电子邮件),我已经在模型中对其进行了验证。 What's going on?
这是怎么回事? Why 400 Bad Request?
为什么要求400错误? Anyone con help me?
有人骗我吗?
newsletter_mailer.rb 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 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.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 %>
Your parameters don't include :newsletters
, see? 您的参数不包括
:newsletters
,看到了吗?
Parameters: {"utf8"=>"✓"}
So, @newsletter.save
is false
and you get a 400
error, just as you specified: 因此,
@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
You don't have params[:newsletters]
because your form is malformed: 您没有
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 %>
You shouldn't manually create the input, you should use an input helper instead. 您不应该手动创建输入,而应该使用输入助手。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.