ruby-on-rails - Ruby on Rails - 我无法发送表单 - 400 错误请求
问题描述
我正在尝试在 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 %>
解决方案
你的参数不包括: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 %>
您不应该手动创建输入,而应该使用输入助手。
推荐阅读
- mysqli - 如何在mysql中运行具有多个条件的查询?
- php - 为什么我运行订阅表单时 Paypal 会出错?
- angular - Angular 2 - 单击菜单项的奇怪效果 - 打开 # ref
- jinja2 - 在 jinja2 中生成动态字符串
- python - PySpark Dataframe - 迭代窗口分区
- java - Fragment Recycle View(带卡)重复和overalped
- python - 来自网站/原始网站的 Python 正则表达式 URL,没有 Https 和 Http
- typescript - React Native with Typescript and Jest 在 0.57 更新后被破坏:找不到相对于目录的预设“module:metro-react-native-babel-preset”
- elasticsearch - Elasticsearch 搜索被勒索软件锁定
- java - 如何使内部 Java 包在 Eclipse 中可访问?