Rails ActionController::RoutingError没有路由匹配 [POST] "/":

如何解决Rails ActionController::RoutingError没有路由匹配 [POST] "/":

导轨 6.0.3

我已经使用 gem 'mail_form' 设置了一个静态邮件表单。

我知道它可以正常工作,因为我可以从 Rails 控制台发送电子邮件

问题出在表单上,​​当我按下提交时,它出现了路由错误

ActionController::RoutingError (No route matches [POST] "/"):

主页表单

<div class="container">
  <%= form_with model: @contact do |f| %>
    <div class="mb-3">
      <h3><%= f.label :name,class: "label" %></h3>
      <%= f.text_field :name,class: "form-control",placeholder: "Write name in here" %>
      <%= f.text_field :email,placeholder: "Write email in here" %>
      <%= f.text_field :message,placeholder: "Write message in here" %>
      <%= f.submit %>
    </div>
  <% end %>
</div>

routes.rb

resources :contact,only: [:create]

contact.rb

class Contact < MailForm::Base
  attribute :name,validate: true
  attribute :email,validate: true
  attribute :message
  def headers
    {
      subject: "My Contact Form",to: 'myemail@gmail.com',from: %("#{name}" <#{email}>)
    }
  end
end

contact_controller.rb

class ContactController < ApplicationController
  def create
    @contact = Contact.new()
    @contact.name = params[:name]
    @contact.email = params[:email]
    @contact.message = params[:message]
    if @contact.deliver

      render json: {message: "Email sent successfully"}
      redirect_to root_path
    else
      render json: @contact.errors
    end
  end
end

我做错了什么或错过了什么步骤?

编辑控制器

class ContactController < ApplicationController

  def create
    @contact = Contact.new(contact_params)
    if @contact.deliver
      redirect_to root_path
    else
      render json: @contact.errors
    end
  end

  private
  def contact_params
    params.require(:contact).permit(:name,:email,:message)
  end
end

已编辑的表单

<div class="container">
  <%= form_for Contact.new,url: contacts_path do |f| %>
    <div class="mb-3">
      <h3><%= f.label :name,placeholder: "Write message in here" %>
      <%= f.submit %>
    </div>
  <% end %>
</div>

编辑 routes.rb

resources :contacts,only: [:create]

解决方法

resources :contacts,only: [:create]

资源应该是复数。

class ContactsController < ApplicationController
  def create
    @contact = Contact.new(contact_params)
    if @contact.deliver
      # You can't both render and redirect 
      render json: { message: "Email sent successfully" }
    else
      render json: @contact.errors
    end
  end

  private
  def contact_params
    params.require(:contact)
          .permit(:name,:email,:message)
  end
end

参数嵌套在 params[:contact][:name]params[:contact][:email] 等中。使用 strong parameters 将参数列入白名单以进行批量赋值,而不是充当人工编译器。

,

@form 不能自动解析路径,我认为:

 <%= form_with model: @contact do |f| %>
  • 尝试添加一个明确的网址:form_with model: @contact,url: contacts_path
  • 如果使用 resourceresources,还要确保 controllers 总是复数,如@max 所说,否则 Rails 迟早会从我的经验中混淆。另一方面,您的联系人只有一种方法,您可以为此添加手动路由,而不要依赖 Rails 自动命名魔法:
# routes

  post "/contact"

# this should also generate a `contact_path` helper,which you can use in the 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?