【问题标题】:Ruby on Rails param is missing or the value is empty without using a modelRuby on Rails 参数丢失或值为空而不使用模型
【发布时间】:2015-04-22 06:59:08
【问题描述】:

在我的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 as one (contact)

当我输入信息并点击提交按钮时,我收到此错误消息 param is missing or the value is empty: contact 我认为导致此错误的原因是因为我的 def contact 是空的。所以我添加了contact.new@contact=contact.newMessageMailer.new 但出现此错误NoMethodError

我该如何解决这个问题?我的def contact下面应该写什么?

【问题讨论】:

  • contact.new 不起作用,它将是 Contact.new

标签: ruby-on-rails ruby model param


【解决方案1】:

您的控制器代码是正确的。你不需要Contact.new 什么的。问题在于您的&lt;form&gt;params 的结果取决于您的表单,而您的表单中没有 contact

代替:

<input type="text" name="subject">

你必须这样做:

<input type="text" name="contact[subject]">

对于您联系表单上的所有字段。

另一种选择是使用 Rails 的表单助手。

【讨论】:

  • 啊,是的,这也是一种可能:)
【解决方案2】:

您的表单中缺少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>

【讨论】:

  • 我没有看到,stackoverflow 没有重新加载页面来查看它,我正在准备/格式化我的答案
猜你喜欢
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
相关资源
最近更新 更多