【问题标题】:ActionController::ParameterMissing (param is missing or the value is empty: USER)ActionController::ParameterMissing(参数丢失或值为空:USER)
【发布时间】:2021-11-20 18:07:00
【问题描述】:

我刚刚使用 Rails 6 构建了一个非常简单的邮件程序,当我部署到生产环境时弹出错误,说我丢失了用户参数丢失,仅供参考,只是一个带有表单的登录页面,您不必登录要发送任何内容,您只需填写它,我们就会通过电子邮件获取信息。 这是表单视图:

<div class="form">
  <div class="row">
    <%= form_for :contact, url: send_contact_path do |f| %>
    <%= f.text_field :name, placeholder: "Full Name" %>
    <%= f.text_field :email, placeholder: "Email Address" %>
    <%= f.text_field :phone_number, placeholder: "Phone Number" %>
  </div>

  <div class="row">
    <%= f.text_field :partner_name, placeholder: "Partner's Full Name" %>
    <%= f.text_field :partner_email, placeholder: "Partner's Email" %>
    <%= f.text_field :partner_phone, placeholder: "Partner's Phone" %>
  </div>
  
  <div class="row">
    <%= f.select(:category, categories, placeholder: "Category") %>
    <%= f.number_field :paid_amount, step: 0.01, placeholder: "Amount Paid" %>
  </div>
  <%= f.text_area :message, placeholder: "Anything you would want to say" %>
  <%= f.submit "Send Info" %>
  <% end %>
</div>

这里是控制器:

  def create_contact
    contact = User.new(contact_params)
    if contact.save
      send_contact(contact)
      send_copy(contact)
      flash[:success] = 'Message sent successfully!'
    else
      redirect_to root_path
      flash[:notice] = 'Error, try again'
    end
  end

  private

  def contact_params
    params.require(:user).permit(:name, :email, :phone_number, :partner_name, :partner_email, :partner_phone, :message, :amount_paid, :category)
  end

  def send_contact(contact)
    mail = Mailjet::Send.create(messages: [{
      "From"=> {
        "Email"=>"email",
        "Name"=>"name"
      },
      "To"=> {
        "Email"=>"email",
        "Name"=>"name"
      },
      "Subject"=>"subject",
      "HTMLPart"=>template(contact)
    }])
  end

谢谢,我使用 pg 作为数据库,使用 mailjet 作为邮件服务

【问题讨论】:

  • 日志中出现的实际错误是什么?
  • 致命 -- : [dcc1dfcf-5bfb-4b59-9318-ddc30333a8e1] 2021-09-28T17:38:18.680224+00:00 app[web.1]: [dcc1dfcf-5bfb-4b59- 9318-ddc30333a8e1] ActionController::ParameterMissing(参数丢失或值为空:用户):

标签: ruby-on-rails parameter-passing mailer mailjet


【解决方案1】:

您的代码存在以下问题:

<%= form_for :contact, url: send_contact_path do |f| %>

即第一个参数:contact。这样做是因为您通过 html 表单收到的对象是 contact 而不是 user,然后在强参数中您会收到错误 user 丢失,因为它不存在,如果您将其替换为 require @ 987654326@ 它也可以按预期工作。

这里是#form_for api 文档供参考: https://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多