参数缺失或值为空:消息
param is missing or the value is empty: message
我使用 Sendgrid 在我的 rails 应用程序上构建了一个联系表。填写联系表格时,出现此错误消息:
ActionController::ParameterMissing in MessagesController#create
param is missing or the value is empty: message
Started POST "/messages" for ::1 at 2020-12-30 16:41:11 +0100
Processing by MessagesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"uCP2fAxAwk/i8678+LkKyg8LVDpRhrb8CY3sng1z+G7fDMsBzm07IGlG/5Kcqm/GZyzygu0+LKvvUKyVtNuEuA==", "/messages"=>{"name"=>"Coline", "email"=>"test@yopmail.com", "phone_number"=>"0606060606", "message"=>"jhsjhfjqshf"}, "commit"=>"Envoyer"}
Completed 400 Bad Request in 4ms (ActiveRecord: 0.0ms)
谁能帮我弄清楚为什么?
我的消息模型:
class Message
include ActiveModel::Model
attr_accessor :name, :email, :phone_number, :body
validates :name, :email, :phone_number, :body, presence: true
end
我的消息控制器:
class MessagesController < ApplicationController
def new
@message = Message.new
end
def create
@message = Message.new message_params
if @message.valid?
MessageMailer.contact(@message).deliver_now
flash[:success] = "Votre message a bien été envoyé !"
redirect_to root_path
else
flash[:danger] = "Votre message n'a pas pu être envoyé."
redirect_to root_path
end
end
private
def message_params
params.require(:message).permit(:name, :email, :phone_number, :body)
end
end
我的邮件邮件:
class MessageMailer < ApplicationMailer
def contact(message)
@body = message.body
mail(to: 'myemail@yopmail.com', subject: 'Nouveau message !')
end
end
我的邮件邮件查看次数(html.erb 和 text.erb):
<%= @body %>
我的联系方式:
<%= form_for messages_path, url: messages_path do |f| %>
<div class="row">
<div class="col-lg-4 col-md-4 col-sm-12">
<%= f.text_field :name, required: true, class: "form-control", placeholder: "Votre nom" %><br>
</div>
<div class="col-lg-4 col-md-4 col-sm-12">
<%= f.text_field :email, required: true, class: "form-control", placeholder: "Votre email" %><br>
</div>
<div class="col-lg-4 col-md-4 col-sm-12">
<%= f.text_field :phone_number, required: true, class: "form-control", placeholder: "Votre numéro de téléphone" %><br>
</div>
</div>
<%= f.text_area :message,
rows: 8,
cols: 40,
required: true,
class: "form-control",
placeholder: "Votre message"%><br>
<%= f.submit 'Envoyer', class: 'btn btn-secondary' %>
<% end %>
在我的 config/environment.rb 以及我的 config/environments/production.rb & config/environments/development.rb (SENDGRID_LOGIN和 SENDGRID_PWD 都在我的 .env 文件中):
ActionMailer::Base.smtp_settings = {
:user_name => ENV['SENDGRID_LOGIN'],
:password => ENV['SENDGRID_PWD'],
:domain => 'mydomain.fr',
:address => 'smtp.sendgrid.net',
:port => 587,
:authentication => :plain,
:enable_starttls_auto => true
}
我已经尝试删除控制器 message_params 中的 'require(:message)' --> 我的浏览器中没有错误消息,但我没有收到任何电子邮件,而且我的终端显示我未经许可参数:
Started POST "/messages" for ::1 at 2020-12-30 16:02:17 +0100
Processing by MessagesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"x+dJYWSNThRzlmLBj9KrUD1ZEkzX1wa67jvOvwNh4vKgyHQcpqC3e/gjM6/rwc5cVX609GtvnO0I5o60usmeJA==", "/messages"=>{"name"=>"Coline", "email"=>"test@yopmail.com", "phone_number"=>"0606060606", "message"=>"jhwsdiufhsukjhdfkdbvf"}, "commit"=>"Envoyer"}
Unpermitted parameters: :utf8, :authenticity_token, :/messages, :commit
Redirected to http://localhost:3000/
Completed 302 Found in 5ms (ActiveRecord: 0.0ms)
错误来自 params.require(:message)
,因为您传入的 params
不包含 :message
密钥(它有 "/messages"
)。
这源于您的观点 - 您将 messages_path
(即 "/messages"
)代替字段 name/model 传递给 form_for
。尝试:
form_for :message, url: messages_path do |f|
...
我使用 Sendgrid 在我的 rails 应用程序上构建了一个联系表。填写联系表格时,出现此错误消息:
ActionController::ParameterMissing in MessagesController#create
param is missing or the value is empty: message
Started POST "/messages" for ::1 at 2020-12-30 16:41:11 +0100
Processing by MessagesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"uCP2fAxAwk/i8678+LkKyg8LVDpRhrb8CY3sng1z+G7fDMsBzm07IGlG/5Kcqm/GZyzygu0+LKvvUKyVtNuEuA==", "/messages"=>{"name"=>"Coline", "email"=>"test@yopmail.com", "phone_number"=>"0606060606", "message"=>"jhsjhfjqshf"}, "commit"=>"Envoyer"}
Completed 400 Bad Request in 4ms (ActiveRecord: 0.0ms)
谁能帮我弄清楚为什么?
我的消息模型:
class Message
include ActiveModel::Model
attr_accessor :name, :email, :phone_number, :body
validates :name, :email, :phone_number, :body, presence: true
end
我的消息控制器:
class MessagesController < ApplicationController
def new
@message = Message.new
end
def create
@message = Message.new message_params
if @message.valid?
MessageMailer.contact(@message).deliver_now
flash[:success] = "Votre message a bien été envoyé !"
redirect_to root_path
else
flash[:danger] = "Votre message n'a pas pu être envoyé."
redirect_to root_path
end
end
private
def message_params
params.require(:message).permit(:name, :email, :phone_number, :body)
end
end
我的邮件邮件:
class MessageMailer < ApplicationMailer
def contact(message)
@body = message.body
mail(to: 'myemail@yopmail.com', subject: 'Nouveau message !')
end
end
我的邮件邮件查看次数(html.erb 和 text.erb):
<%= @body %>
我的联系方式:
<%= form_for messages_path, url: messages_path do |f| %>
<div class="row">
<div class="col-lg-4 col-md-4 col-sm-12">
<%= f.text_field :name, required: true, class: "form-control", placeholder: "Votre nom" %><br>
</div>
<div class="col-lg-4 col-md-4 col-sm-12">
<%= f.text_field :email, required: true, class: "form-control", placeholder: "Votre email" %><br>
</div>
<div class="col-lg-4 col-md-4 col-sm-12">
<%= f.text_field :phone_number, required: true, class: "form-control", placeholder: "Votre numéro de téléphone" %><br>
</div>
</div>
<%= f.text_area :message,
rows: 8,
cols: 40,
required: true,
class: "form-control",
placeholder: "Votre message"%><br>
<%= f.submit 'Envoyer', class: 'btn btn-secondary' %>
<% end %>
在我的 config/environment.rb 以及我的 config/environments/production.rb & config/environments/development.rb (SENDGRID_LOGIN和 SENDGRID_PWD 都在我的 .env 文件中):
ActionMailer::Base.smtp_settings = {
:user_name => ENV['SENDGRID_LOGIN'],
:password => ENV['SENDGRID_PWD'],
:domain => 'mydomain.fr',
:address => 'smtp.sendgrid.net',
:port => 587,
:authentication => :plain,
:enable_starttls_auto => true
}
我已经尝试删除控制器 message_params 中的 'require(:message)' --> 我的浏览器中没有错误消息,但我没有收到任何电子邮件,而且我的终端显示我未经许可参数:
Started POST "/messages" for ::1 at 2020-12-30 16:02:17 +0100
Processing by MessagesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"x+dJYWSNThRzlmLBj9KrUD1ZEkzX1wa67jvOvwNh4vKgyHQcpqC3e/gjM6/rwc5cVX609GtvnO0I5o60usmeJA==", "/messages"=>{"name"=>"Coline", "email"=>"test@yopmail.com", "phone_number"=>"0606060606", "message"=>"jhwsdiufhsukjhdfkdbvf"}, "commit"=>"Envoyer"}
Unpermitted parameters: :utf8, :authenticity_token, :/messages, :commit
Redirected to http://localhost:3000/
Completed 302 Found in 5ms (ActiveRecord: 0.0ms)
错误来自 params.require(:message)
,因为您传入的 params
不包含 :message
密钥(它有 "/messages"
)。
这源于您的观点 - 您将 messages_path
(即 "/messages"
)代替字段 name/model 传递给 form_for
。尝试:
form_for :message, url: messages_path do |f|
...