首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Rails 5不会提交我的表单来创建路由

在Rails 5中,如果你遇到了表单无法提交以创建新路由的问题,这可能是由于几个不同的原因造成的。以下是一些排查和解决问题的步骤:

1. 确保路由已定义

首先,确保你的config/routes.rb文件中已经定义了相应的路由。例如,如果你要创建一个posts资源,你的路由文件应该包含以下内容:

代码语言:javascript
复制
Rails.application.routes.draw do
  resources :posts
end

这将会创建以下路由:

  • GET /posts - 显示所有帖子的列表
  • GET /posts/new - 显示创建新帖子的表单
  • POST /posts - 处理新帖子的创建
  • GET /posts/:id - 显示特定帖子的详情
  • GET /posts/:id/edit - 显示编辑特定帖子的表单
  • PATCH/PUT /posts/:id - 更新特定帖子
  • DELETE /posts/:id - 删除特定帖子

2. 检查控制器

确保你有一个对应的控制器来处理创建操作。例如,对于posts资源,你应该有一个PostsController,并且其中包含一个create动作:

代码语言:javascript
复制
class PostsController < ApplicationController
  def create
    @post = Post.new(post_params)
    if @post.save
      redirect_to @post, notice: 'Post was successfully created.'
    else
      render :new
    end
  end

  private

  def post_params
    params.require(:post).permit(:title, :content)
  end
end

3. 创建表单

确保你的表单使用了正确的form_withform_for辅助方法来创建表单,并且指向正确的动作。例如:

代码语言:javascript
复制
<%= form_with(model: @post, local: true) do |form| %>
  <% if @post.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
      <ul>
        <% @post.errors.full_messages.each do |message| %>
          <li><%= message %></li>
        <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= form.label :title %>
    <%= form.text_field :title %>
  </div>

  <div class="field">
    <%= form.label :content %>
    <%= form.text_area :content %>
  </div>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

4. 检查JavaScript和CSS

如果你的表单使用了JavaScript或CSS,确保这些资源没有错误,并且正确加载。有时候,JavaScript错误或CSS问题可能会导致表单无法提交。

5. 检查浏览器控制台和网络请求

打开浏览器的开发者工具(通常按F12或右键点击页面并选择“检查”),查看控制台是否有错误信息,并检查网络请求是否成功发送和处理。

6. 检查CSRF保护

Rails默认启用了CSRF保护。确保你的表单包含了CSRF令牌。如果你使用的是form_with,它会自动包含CSRF令牌。如果你使用的是form_for,确保你包含了<%= csrf_meta_tags %>在表单的顶部。

7. 检查日志

最后,检查Rails服务器的日志文件,看看是否有任何错误信息或警告,这些信息可能会提供有关问题的线索。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

绕过GitHub的OAuth授权验证机制($25000)

token在内的隐藏表单字段的POST请求。...乍一看,这不算是什么安全问题,但是,深入探究发现,路由router机制存在隐患。 Rails 路由能够识别 URL 地址,并把它们分派给控制器动作或 Rack 应用进行处理。...HTTP HEAD请求时Rails路由在说谎 HEAD方法跟GET方法相同,只不过服务器响应时不会返回消息体。一个HEAD请求的响应中,HTTP头中包含的元信息应该和一个GET请求的响应消息相同。...所以Rails以及其它的一些网络框架采用了一个聪明的技巧:它试图将HEAD请求路由到与GET请求相同的地方,然后运行控制器代码,以此省略掉消息响应体。...发送一个授权验证的HEAD请求,将会发生什么情况?前面我们说过,Rails路由会把它当成GET请求来处理,所以它会被发送到控制器中。

2.8K10
  • 从Web开发者的视角来解读MVC架构

    点击上方“Lemon黄”关注我哦,不定期原创文,定期好技术文推广分享 ?...不过我个人认为:用户能够采用多种方式来创建MVC架构,正是其亮点与灵活性所在。 下面,我们正式从Web开发者的角度为大家解读MVC的三个组件:模型、视图和控制器。...例如:用户在访问页面时点击某个链接,触发了一个GET请求;或者是以提交表单的形式,发送一个POST请求;当然我们也可以发出删除、或提出更新等类型的请求。...如上图所示,用户可以通过浏览器看到应用程序的视图。 首先,应用程序可以将他们的输入作为某种请求提交给所谓的“路由器”。而且这些请求正是用户通过点击某个链接,所产生并触发的某条路径需求。...接着,“路由器”开始调用基于该路由的特定控制器方法。因此,如果需要使用或获取一些数据的话,控制器需要与模型进行交互,而该模型也会与后台的数据库进行交互。

    3.5K20

    React 学习路线图 2018版

    文中有多处学习资料链接,大家可以通过访问原文来获取 这个 React 学习路线的思维导图来源自 Adam Gołąb 的 react-developer-roadmap 。...截止至本文发布时,原仓库已经有了中文版,大家可自行选择查阅,由于是 roadmap 的聚合类列表,所以翻译方面差异不会很大。 学习路线图 ?...发起一些 AJAX (XHR) 请求 ·学习新功能 (ES 6+) ·此外,熟悉下 jQuery 库 2.开发通用技能 i.学习 GIT ,在 GitHub 上创建一些仓库...○Redux Form ○Formik ○Formsy ○Final Form 9.路由 ○React-Router ○Router5 ○Redux-First...之后就会打开思维导图,修改之后上传后更新 README 的 PNG 图片 (需要导出),然后提交 PR 。 提交 PR 以帮助改进 在 issues 中进行讨论想法 帮忙宣传

    2.4K41

    如何使用Prometheus监视您的Ubuntu 14.04服务器

    没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。...第1步 - 安装Prometheus Server 首先,创建一个新目录来存储您在本教程中下载的所有文件并移至该目录。...第6步 - 设置Rails环境 创建一个目录来存储与PromDash关联的SQLite3数据库。...在显示的表单中,为您的目录命名,例如My Dashboards,然后单击Create Directory。 提交表单后,您将被带回主页。立即单击“ 新建仪表板”按钮以创建新仪表板。...在显示的表单中,为仪表板命名,例如Simple Dashboard,然后从下拉菜单中选择刚刚创建的目录。 提交表单后,您将能够看到新的仪表板。 您的信息中心已有一个图表,但需要进行配置。

    4.3K00

    如何使用Prometheus监控CentOS 7服务器

    没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。...使用vi或任何其他文本编辑器来创建一个名为node_exporter.service的单元配置文件。...第6步 - 设置Rails环境 创建一个目录来存储与PromDash关联的SQLite3数据库。...在显示的表单中,为您的目录命名,例如My Dashboards,然后单击Create Directory。 提交表单后,您将被带回主页。立即单击“ 新建仪表板”按钮以创建新仪表板。...在显示的表单中,为仪表板命名,例如Simple Dashboard,然后从下拉菜单中选择刚刚创建的目录。 提交表单后,您将能够看到新的仪表板。 您的信息中心已有一个图表,但需要进行配置。

    6.6K00

    laravel中csrf验证详解

    /CsrfController.php 创建两个方法,一个显示表单,一个提交表单 # ... class CsrfController extends Controller { public function...image 再次提交表单,便可打印出表单数据: ? image 忽略csrf验证 当我们与第三方接口交互时,不可能让第三方接口从我们的服务器获取token,此时csrf就会误伤友军。...因此,我们有时需要将csrf验证取消 csrf验证是一个独立的中间件,如果我们在app/Http/Kernel.php的$middlewareGroups将其屏蔽,就不会再对任何请求进行csrf验证,这种方法自然是不可取的...image 我们只需要在app/Http/Middleware/VerifyCsrfToken.php中间件的$except属性中添加要过滤的路由,即可使这些路由跳过验证 protected $except...= [ '/post' ]; 此时将form表单中的@csrf删除,再提交表单,并不会触发419错误 ?

    2.3K20

    Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识

    如何去创建路由规则、如何去提交表单并接收表单项的值、如何去给密码加密、如何去提取页面公共部分(相当于用户控件和母版页)等等...   下面就一步步开始吧^_^!......发生了变化 image.png   可以发现url中出现了我表单中输入并要提交的值!   ...' }); }); ...   3.运行,并提交表单 在浏览器中运行:http://localhost:8000/subform,输入表单项并提交,可以发现url不会发生变化 image.png   ...改为post方式后,会发现不会跟get方式提交一样在url中出现了表单中输入并要提交的值!...再回过头看看GET和POST方式接收值,从直接效果上来看 req.query:我用来接收GET方式提交参数 req.body:我用来接收POST提交的参数 req.params:两种都能接收到

    2.8K70

    web框架在什么程度上受限 ?

    有许多极简主义的 web 框架,至少在 Python 世界中是这样(我只关心 Python)。Bobo、BFG、Pylons、Werkzeug 等。这些都不会以任何方式碍事。...答案5:Rails 与需要的一样有用或无用。如果需要使用纯 SQL 加载集合,这很简单。如果想在同一行中使用所有内置的 ActiveRecord Fu,也可以。...RESTful 路由非常简单,但如果 REST 的特定 Rails 风格不满足需求,则路由是完全可配置的。在 Rails 应用程序中,可以使用默认设置的任意多或任意少,并且可以在所有级别进行重新配置。...答案7:多年来一直使用 Ruby/Rails,并且与使用过的几乎所有其他语言/框架(跨越近 15 年的 Java、PHP、ColdFusion、ASP 等)不同,当需要时,它不会碍事。...这是完全不同的东西。想要实现什么?然后我们也许可以帮助实现。答案9:如果知道不会使用 ORM 或创建用户界面,那么实际上就消除了首先使用 web 应用程序框架的 90% 的原因。

    5110

    【Web开发】Flask框架基础知识

    ') # 定义根路由视图函数,生成表单对象,获取表单数据,进行表单数据验证 @app.route('/form', methods=['GET', 'POST']) def form():...其中,StringField指定了表单提交的数据类型为String,DataRequired表明该项为必填项,EqualTo封装了两个表单的一致性比较过程,最后调用register_form.validate_on_submit...来一次性提交所有的验证逻辑。...前端方面,通过form可以直接对接到后端定义的表单属性,其中python2需要添加 {{ form.csrf_token() }}来指定表单的token,在python3版本中,实测不需要该语句也能运行...本例中,我定义了两个接口,第一个根目录接口,分别尝试了通过sql来从直接查询和调用对象进行查询的两种查询方式,第二个/create接口,实现了向数据表Role中插入一个名称为admin的用户数据。

    2.1K20

    通过 Laravel 创建一个 Vue 单页面应用(六)

    以下是迄今为止的系列概要: 第1部分 – 设置项目和 Vue 路由器 第2部分 – 在 Vue 路由器中加载异步数据 第3部分 – 在 Laravel 中创建真实的用户端 第4部分 – 编辑用户 第5部分...唯一的区别是用现有用户数据(包括用户id)填充表单,而不是用空表单创建用户。 配置路由 接下来,我们需要配置 Vue 路由并链接到页面,以便可以导航到用户创建页面。...让我们在不定义路由的情况下完善 UsersCreate 组件中 onSubmit() 方法,这样我们能快捷的看到提交表单时产生的错误: methods: { onSubmit($event) {...} } 如果您提交的数据无效,您将收到类似的消息,如下所示: 提交成功 我们已经处理了服务器错误或验证错误的情况;让我们通过创建成功的用户来结束。...; } 结束 我们现在有了一个简单的带有简单数据验证的表单来创建用户。

    3.8K20

    Go高级之Gin框架中POST参数的提取(二)

    常见的Content-Type类型包括: application/x-www-form-urlencoded:用于传输经过URL编码的表单数据,常用于HTML表单提交。...例如,使用POST请求提交表单数据时,请求通常具有以下特征: 请求方法:POST 请求URL:指定要提交数据的目标资源的URL 请求头(headers):Content-Type设置为application...(body),可以向服务器发送数据并执行相应的操作,例如创建新的资源、更新已有资源等。...,其中HTML文件夹和上面的go文件是同一级,你看我写的package应该就知道了 这是index.html,就是一个简单的表单,提交的路由是前面定义好了的post路由 {{define "index.html...界面中所有用户输入的东西,格式都是string类型的,你如果要想正确绑定,那你的数据格式就要和type定义的类型一样,感觉有点像是废话,也确实是废话,实际前端开发中,一般是用axios或者什么库,基本上不会使用默认的事件

    1.3K42

    使用Python监听HTML点击事件的全攻略:从基础到高级实现

    这种事件通常用于执行一些JavaScript代码,比如提交表单、切换页面或显示/隐藏元素等。如何监听HTML点击事件?...通过响应用户的点击操作,我们可以实现各种功能,如表单提交、数据展示、页面切换等。这种交互式的设计可以使用户与应用之间的互动更加流畅和自然。...在我们的示例中,虽然我们只展示了简单的前端点击事件监听,但在实际应用中,通常需要通过Ajax请求或表单提交等方式将用户的操作发送到后端进行处理。...if __name__ == '__main__': app.run(debug=True)在这个示例中,我们创建了一个Flask应用,并定义了两个路由:/: 显示一个简单的HTML页面,包含一个按钮...我们创建了一个名为Click的数据库模型,用于存储点击事件的次数。在/click路由中,每当接收到一个点击事件时,我们将点击次数加1,并将更新后的点击次数作为JSON响应返回给前端。

    35800

    【Web前端】创建我的第一个 Web 表单

    将创建一个简单的联系人表单,允许用户输入他们的姓名、电子邮件、消息内容,并提交该信息。 表单设计要素 姓名 - 一个文本框,用户输入他们的名字。...​​​:用户提交表单的按钮。 HTML 代码示例 <!...Express 应用 // 使用 body-parser 中间件解析请求体 app.use(bodyParser.urlencoded({ extended: true })); // 定义处理表单提交的路由...解析请求体:使用 ​​body-parser​​ 的 ​​urlencoded​​ 方法来解析 URL 编码的数据(即表单数据)。​​extended: true​​ 选项允许使用丰富的数据对象。...定义 POST 路由:当用户提交表单时,浏览器会向 ​​/submit​​ 发送一个 POST 请求。

    19110

    众多Python Web框架比较,哪个适合你,你就用哪个!

    DePaul大学计算机科学教授Massimo Di Pierro受到Rails的启发,用Python创建一个易于设置和使用的Web框架。结果是Web2py。...Bottle中的路由系统将URL映射到函数,其语法与Flask几乎完全相同。也不仅限于硬连线路径;可以动态创建它们。...我其实喜欢与Bottle捆绑的简单模板系统;它的语法不起眼,它允许混合代码和模板文本而不会有不适当的困难。 Bottle甚至支持多个服务器后端。...Wheezy的文档中详细解释了这些细节,其中包括“创建留言簿”教程,但其他方面则是关于奖金的。 Wheezy的开发似乎已经停滞不前,因为该项目的最后一次提交都记录在2015年。...它们的开销很小,但也缺乏更强大的Web应用程序所需的更重的工具。 Web.py是涉及用户交互(例如表单提交)的应用程序的快速起点。 Wheezy.web和它的库允许按照自己想要的功能去做。

    4.6K20

    带你认识 flask 全文搜索

    出于所有这些原因,我决定将搜索功能抽象化。我的想法是以通用条件来设计特性,所以不会假设Post模型是唯一需要编制索引的模型,也不会假设Elasticsearch是唯一选择的搜索引擎。...由于我需要在所有页面中都显示此表单,因此无论用户在查看哪个页面,我都需要创建一个SearchForm类的实例。唯一的要求是用户登录,因为对于匿名用户,我目前不会显示任何内容。...与其在每个路由中创建表单对象,然后将表单传递给所有模板,我将向你展示一个非常有用的技巧,当你需要在整个应用中实现一个功能时,可以消除重复代码。...我将method属性设置为get,因为我希望表单数据作为查询字符串,通过GET请求提交。另外,我创建的其他表单action属性为空,因为它们被提交到渲染表单的同一页面。...而这个表单很特殊,因为它出现在所有页面中,所以我需要明确告诉它需要提交的地方,这是专门用于处理搜索的新路由。 08 搜索视图函数 完成搜索功能的最后一项功能是接收搜索表单的视图函数。

    3.5K20

    使用Ruby on Rails和Bootstrap开发社交网络平台的详细教程

    Ruby on Rails提供了强大的后端支持,而Bootstrap则提供了灵活的前端组件,使得我们可以轻松创建现代化的用户界面。...你可以使用以下命令进行安装:gem install rails步骤2:创建Rails应用使用以下命令在终端中创建一个新的Rails应用:rails new social_network然后进入应用目录:...:migrate步骤5:生成Devise认证使用Devise来实现用户认证。...'然后运行以下命令安装和生成Bootstrap:bundle installrails generate bootstrap:install步骤7:创建社交网络功能在config/routes.rb中添加社交网络功能的路由...随着你的学习深入,你可以添加更多功能,例如用户认证、用户间关系、帖子、评论等,以创建一个更加完整和实用的社交网络应用。祝你在Ruby on Rails的开发之旅中取得成功!

    23810

    Rails路由

    用于生成路径和URL地址的辅助方法 在创建资源路由时,会同时创建多个可以在控制器中使用的辅助方法,如上面的资源路由会创建以下方法: photos_path:返回值为 /photos new_photos_path...:videos 单数资源 使用 resource 方法可以创建单数资源,这会创建6个不同的路由: ?...RUL地址 除了使用路由辅助方法,Rails还可以从参数数组创建路径和URL地址,假如有以下路由: resources :magazine do resources :ads end 使用 magazine_ad_path...as 选项来为路由命名 get 'exit', to: 'sessions#destroy', as: :logout 这个路由声明会创建 logout_path 和 logout_url 这两个具名辅助方法...和 edit 动作上 限制创建的路由 Rails 默认会为每个 REST 式路由创建7个默认动作,可以使用 :only 和 :except 选项来微调此行为。

    4.5K20

    通过 Laravel 创建一个 Vue 单页面应用(四)

    在处理第一个表单时,我们有机会了解如何定义动态 Vue 路由。我们的路由的动态部分是与用户数据记录匹配的用户 ID。...第一步,创建一个新的文件夹来放置请求后端的模块。你可以用任意方式来创建这些文件。...我们需要重置这个属性为 false ,来确保我们可以再次提交数据。我们最后的 then() 使用了 _ 来表示这里有一个变量,但我们并不需要使用。...; } 现在,前端组件已经修改完毕,它可以处理表单的提交,并能在 API 成功执行之后同步更新模板。...我的目标为:设置提示消息,并将用户重定向回先前的位置(即, /users 页)。 第二个目标,在表单底部添加一个 返回 或 取消 按钮,来放弃更新,并返回上一页。

    2K10
    领券