首页
学习
活动
专区
工具
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服务器的日志文件,看看是否有任何错误信息或警告,这些信息可能会提供有关问题的线索。

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

相关·内容

绕过GitHubOAuth授权验证机制($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.5K00

    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.7K70

    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.2K20

    【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.1K42

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

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

    30500

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

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

    4.5K20

    带你认识 flask 全文搜索

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

    3.5K20

    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

    使用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开发之旅中取得成功!

    22310

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

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

    2K10

    《Flask Web开发》学习笔记

    特别提醒:这本书代码会提交在github,有基础的人可以直接看github代码学习flask。基础差还是建议买书学习,书中会有对“为什么这么用?”...二、要点记录 1,Flask程序都必须创建一个app实例,app实例是Flask类对象,FLask(__name__)参数决定了程序根目录 2,单个文件程序,使用@app.route('/')装饰器为函数注册路由...字段对象可附属一个或多个验证函数,验证函数就是用来验证用户提交form输入值是否符合要求 11,Flask-Bootstrap提供预先定义好表单样式渲染整个Flask-WTF表单:{{ wtf.quick_form...(form) }}  12,判断所有验证函数是否接收字段:validate_on_submit() True/False 13,浏览器刷新会重新提交前一个请求,post表单请求需要重定向到get请求:...,优化客户加载体验 21,在单元测试中,需要在不同配置环境运行程序:使用程序工厂函数,可以动态修改配置,创建多个程序实例 22,程序工厂函数,让定义路由复杂,程序在运行时创建,只有调用create_app

    1.6K10

    五分钟,用flask做一个简单交互页面

    3、编写路由 在 Flask 应用中,路由用于指定请求 URL 与相应处理函数之间关系。可以使用 @app.route() 装饰器定义路由。...增强功能 下面我们增加一些高级功能,比如表单提交 我们使用 Flask 中 form 模块,这个模块提供了处理表单数据方法和工具。...使用 Flask 和 form 模块创建一个简单表单页面,并将表单数据提交到数据库中 from flask import Flask, render_template, request from flask_wtf...在表单类中还定义了一些验证器,用于确保表单数据合法性。 接下来,我们在路由函数中创建了一个 UserForm 实例,并将其传递给模板进行渲染。...这样就可以在本地运行应用,并访问 http://localhost:5000/测试表单功能了。 好了,以上就是今天分享,代码非常简单,5分钟直接搞定!

    63440
    领券