Ruby on Rails 缺少参数或值为空,没有使用模型
Ruby on Rails param is missing or the value is empty without using a model
在我的contact.html中,我有这个代码
<div class="form">
<form name="email-form" method="POST">
<label class="field-label" for="name">Name:</label>
<input class="w-input text-field-2" id="name" type="text" name="name" data-name="Name" required="required">
<label class="field-label" for="Email">Email:</label>
<input class="w-input text-field-2" id="email" type="email" name="email" data-name="Email" required="required">
<label class="field-label" for="Subject">Subject:</label>
<input class="w-input text-field-2" id="subject" type="text" name="subject" data-name="Subject">
<label class="field-label" for="Content">Text Message:</label>
<textarea class="w-input text-field-2 area" id="content" name="content" data-name="Text Area" required="required"></textarea>
<div>
<input class="w-button button" type="submit" value="Submit Message" data-wait="Please wait...">
</div>
</form>
</div>
这是在我的控制之下
def contact
end
def send_mail
MessageMailer.new_message(contact_params).deliver
redirect_to contact_path, notice: 'Your messages has been sent.'
end
private
def contact_params
params.require(:contact).permit(:name, :email, :subject, :content)
end
在mailers/message_mailer.rb
下
class MessageMailer < ActionMailer::Base
default from: "sys.questdentalusa@gmail.com"
default to: "questdentalusa@gmail.com"
def new_message(contact)
@contact = contact
mail subject: @contact.subject
end
end
在我的new_message.text.erb下面是这个代码
Name: <%= @contact.name %>
Email: <%= @contact.email %>
Message: <%= @contact.content %>
我要发送一封电子邮件,其中包含输入的用户名、电子邮件和消息,但未 保存在数据库中。当我像这样传递四个参数时
def send_mail
MessageMailer.new_message(:name, :email, :subject, :content).deliver
redirect_to contact_path, notice: 'Your messages has been sent.'
end
它工作得很好,但我被告知只使用一个参数,似乎将四个参数组合在一起:name, email, subject, content
为一个 (contact
)
当我输入信息并点击提交按钮时,我收到此错误消息
param is missing or the value is empty: contact
我认为导致此错误的原因是因为我的 def contact
是空的。所以我添加了 contact.new
and @contact=contact.new
and MessageMailer.new
但是这个错误发生 NoMethodError
我该如何解决这个问题?我的 def contact
下面应该写什么?
您的控制器代码是正确的。您不需要 Contact.new
或其他东西。问题出在您的 <form>
上。 params
中的内容取决于您的表单,而您的表单中没有 contact
.
而不是:
<input type="text" name="subject">
你必须这样做:
<input type="text" name="contact[subject]">
以及您联系表上的所有字段。
另一种选择是使用 Rails' 表单助手。
contact[]
在您的表单中缺失,请参阅下面正确的:
<div class="form">
<form name="email-form" method="POST">
<label class="field-label" for="name">Name:</label>
<input class="w-input text-field-2" id="name" type="text" name="contact[name]" data-name="Name" required="required">
<label class="field-label" for="Email">Email:</label>
<input class="w-input text-field-2" id="email" type="email" name="contact[email]" data-name="Email" required="required">
<label class="field-label" for="Subject">Subject:</label>
<input class="w-input text-field-2" id="subject" type="text" name="contact[subject]" data-name="Subject">
<label class="field-label" for="Content">Text Message:</label>
<textarea class="w-input text-field-2 area" id="content" name="contact[content]" data-name="Text Area" required="required"></textarea>
<div>
<input class="w-button button" type="submit" value="Submit Message" data-wait="Please wait...">
</div>
</form>
</div>
在我的contact.html中,我有这个代码
<div class="form">
<form name="email-form" method="POST">
<label class="field-label" for="name">Name:</label>
<input class="w-input text-field-2" id="name" type="text" name="name" data-name="Name" required="required">
<label class="field-label" for="Email">Email:</label>
<input class="w-input text-field-2" id="email" type="email" name="email" data-name="Email" required="required">
<label class="field-label" for="Subject">Subject:</label>
<input class="w-input text-field-2" id="subject" type="text" name="subject" data-name="Subject">
<label class="field-label" for="Content">Text Message:</label>
<textarea class="w-input text-field-2 area" id="content" name="content" data-name="Text Area" required="required"></textarea>
<div>
<input class="w-button button" type="submit" value="Submit Message" data-wait="Please wait...">
</div>
</form>
</div>
这是在我的控制之下
def contact
end
def send_mail
MessageMailer.new_message(contact_params).deliver
redirect_to contact_path, notice: 'Your messages has been sent.'
end
private
def contact_params
params.require(:contact).permit(:name, :email, :subject, :content)
end
在mailers/message_mailer.rb
下class MessageMailer < ActionMailer::Base
default from: "sys.questdentalusa@gmail.com"
default to: "questdentalusa@gmail.com"
def new_message(contact)
@contact = contact
mail subject: @contact.subject
end
end
在我的new_message.text.erb下面是这个代码
Name: <%= @contact.name %>
Email: <%= @contact.email %>
Message: <%= @contact.content %>
我要发送一封电子邮件,其中包含输入的用户名、电子邮件和消息,但未 保存在数据库中。当我像这样传递四个参数时
def send_mail
MessageMailer.new_message(:name, :email, :subject, :content).deliver
redirect_to contact_path, notice: 'Your messages has been sent.'
end
它工作得很好,但我被告知只使用一个参数,似乎将四个参数组合在一起:name, email, subject, content
为一个 (contact
)
当我输入信息并点击提交按钮时,我收到此错误消息
param is missing or the value is empty: contact
我认为导致此错误的原因是因为我的 def contact
是空的。所以我添加了 contact.new
and @contact=contact.new
and MessageMailer.new
但是这个错误发生 NoMethodError
我该如何解决这个问题?我的 def contact
下面应该写什么?
您的控制器代码是正确的。您不需要 Contact.new
或其他东西。问题出在您的 <form>
上。 params
中的内容取决于您的表单,而您的表单中没有 contact
.
而不是:
<input type="text" name="subject">
你必须这样做:
<input type="text" name="contact[subject]">
以及您联系表上的所有字段。
另一种选择是使用 Rails' 表单助手。
contact[]
在您的表单中缺失,请参阅下面正确的:
<div class="form">
<form name="email-form" method="POST">
<label class="field-label" for="name">Name:</label>
<input class="w-input text-field-2" id="name" type="text" name="contact[name]" data-name="Name" required="required">
<label class="field-label" for="Email">Email:</label>
<input class="w-input text-field-2" id="email" type="email" name="contact[email]" data-name="Email" required="required">
<label class="field-label" for="Subject">Subject:</label>
<input class="w-input text-field-2" id="subject" type="text" name="contact[subject]" data-name="Subject">
<label class="field-label" for="Content">Text Message:</label>
<textarea class="w-input text-field-2 area" id="content" name="contact[content]" data-name="Text Area" required="required"></textarea>
<div>
<input class="w-button button" type="submit" value="Submit Message" data-wait="Please wait...">
</div>
</form>
</div>