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

Rails嵌套表单不会更新。strong_params设置正确

Rails嵌套表单不会更新是指在Rails框架中,当使用嵌套表单进行数据提交时,数据没有正确更新到数据库中的情况。这可能是由于strong_params设置不正确导致的。

在Rails中,为了保护应用程序免受跨站脚本攻击(XSS)和参数污染攻击的影响,引入了strong_params机制。strong_params要求我们在控制器中明确指定允许的参数,以防止恶意用户提交非法参数。

要解决嵌套表单不会更新的问题,首先需要确保strong_params设置正确。在控制器中,我们需要使用permit方法来允许嵌套参数的传递。例如,假设我们有一个Post模型,其中包含多个Comment模型,可以按如下方式设置strong_params:

代码语言:txt
复制
def post_params
  params.require(:post).permit(:title, :content, comments_attributes: [:id, :text])
end

上述代码中,我们使用permit方法允许传递post模型的title和content属性,以及comments_attributes参数,其中包含comment模型的id和text属性。

另外,还需要确保在表单中正确地使用嵌套属性。在表单中,我们需要使用fields_for方法来生成嵌套属性的输入字段。例如,对于上述的Post和Comment模型,可以按如下方式在表单中使用嵌套属性:

代码语言:txt
复制
<%= form_for @post do |f| %>
  <%= f.text_field :title %>
  <%= f.text_area :content %>
  
  <%= f.fields_for :comments do |c| %>
    <%= c.text_field :text %>
  <% end %>
  
  <%= f.submit %>
<% end %>

上述代码中,我们使用fields_for方法生成了一个嵌套的comment属性的输入字段。

除了确保strong_params设置正确和正确使用嵌套属性之外,还需要确保在控制器中正确处理表单提交。在控制器的相应动作中,需要使用update_attributes或update方法来更新模型的属性。例如,对于上述的Post模型,可以按如下方式更新属性:

代码语言:txt
复制
def update
  @post = Post.find(params[:id])
  
  if @post.update_attributes(post_params)
    redirect_to @post
  else
    render 'edit'
  end
end

上述代码中,我们使用update_attributes方法根据strong_params中允许的参数更新post模型的属性。

总结起来,解决Rails嵌套表单不会更新的问题需要确保以下几点:

  1. strong_params设置正确,明确允许嵌套参数的传递。
  2. 在表单中正确使用嵌套属性,使用fields_for方法生成嵌套属性的输入字段。
  3. 在控制器中正确处理表单提交,使用update_attributes或update方法更新模型的属性。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。

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

相关·内容

在CVM上使用rbenv安装RoR

更新并安装依赖项 首先,我们要更新apt请用下面的的命令: sudo apt-get update 接下来,我们使用apt-get命令安装rbenv和Ruby所需的依赖项: sudo apt-get install...echo 'eval "$(rbenv init -)"' >> ~/.bashrc 接下来,输入以下命令启动rbenv: source ~/.bashrc 您可以使用type命令检查rbenv是否已正确设置...接下来,我们将设置gems和Rails。 使用Gem Gems是扩展Ruby功能的包。我们将要通过gem命令安装Rails 。...每当您安装新版本的Ruby或提供命令的gem时,您应该运行: rbenv rehash 由于在安装成功后没有提示,我们可以通过使用以下命令来验证Rails是否已正确安装: rails -v 如果安装正确...我们现在可以继续设置Ruby on Rails环境了。 安装JavaScript Runtime 一些Rails功能(例如Asset Pipeline)依赖于JavaScript Runtime。

3.7K80

【面试题】412- 35 道必须清楚的 React 面试题

主题: React 难度: ⭐⭐⭐ 在 HTML 中,表单元素如 、和通常维护自己的状态,并根据用户输入进行更新。...包含表单的组件将跟踪其状态中的输入值,并在每次回调函数(例如onChange)触发时重新渲染组件,因为状态被更新。以这种方式由 React 控制其值的输入表单元素称为受控组件。...主题: React 难度: ⭐⭐⭐ 如果试图直接更新 state ,则不会重新渲染组件。...componentDidMount:在第一次渲染之后执行,可以在这里做AJAX请求,DOM 的操作或状态更新以及设置事件监听器。...主题: React 难度: ⭐⭐⭐⭐ 当应用程序在开发模式下运行时,React 将自动检查咱们在组件上设置的所有 props,以确保它们具有正确的数据类型。

4.3K30
  • 如何在Ubuntu 18.04上使用rbenv安装Ruby on Rails

    安装完成后,您可以安装rbenv并使用它来安装Ruby, 首先,更新您的包列表: sudo apt update 接下来,安装安装Ruby所需的依赖项: sudo apt install autoconf...(rbenv init -)"' >> ~/.bashrc 接下来,将您对~/.bashrc文件所做的更改应用于当前的shell会话: source ~/.bashrc 使用该type命令验证是否已正确设置...安装完成后,使用global子命令将其设置为我们的默认版本的Ruby : rbenv global 2.5.1 通过检查其版本号来验证Ruby是否已正确安装: ruby -v 如果你安装了2.5.1版本的...您现在已经安装了至少一个版本的Ruby,并设置了您的默认Ruby版本。接下来,我们将设置gems和Rails。 第三步 - 使用Gems Gems是Ruby库的分布方式。...每当你安装新版本的Ruby或提供命令的gem(如Rails)时,你应该运行: rbenv rehash 使用以下命令打印其版本,验证是否已正确安装Railsrails -v 如果安装正确,您将看到已安装的

    6.3K50

    使用Capistrano,Nginx和Puma在Ubuntu 14.04上部署Rails应用程序

    更新包索引文件: deploy@droplet:~$ sudo apt-get update 然后,安装Nginx: deploy@droplet:~$ sudo apt-get install curl...由于有许多数据库可供选择,我们不会在本教程中介绍它们。 第三步 - 安装RVM和Ruby 我们不会直接安装Ruby。相反,我们将使用Ruby版本管理器。...RVM允许您在同一系统上轻松安装和管理多个rubies,并根据您的应用使用正确的一个。当您必须升级Rails应用程序以使用更新的ruby时,这会让生活变得更加轻松。...和Bundler 一旦设置了Ruby,我们就可以开始安装Rubygems了。...: deploy@droplet:~$ gem install rails -v '4.2.0' -V --no-ri --no-rdoc 第五步 - 设置SSH密钥 由于我们要设置流畅的部署,因此我们将使用

    5K40

    如何在Ubuntu 14.04上使用PostgreSQL和Ruby on Rails应用程序

    本教程将向您展示如何设置开发Ruby on Rails环境,该环境允许您的应用程序在Ubuntu 14.04服务器上使用PostgreSQL数据库。首先,我们将介绍如何安装和配置PostgreSQL。...首先,更新apt-get: sudo apt-get update 然后安装PostgreSQL及其开发库: sudo apt-get install postgresql postgresql-contrib...使用-d postgresql选项将PostgreSQL设置为数据库,并确保将突出显示的单词替换为您的应用程序名称: cd ~ rails new appname -d postgresql 然后进入应用程序的目录...我们需要为您的应用程序配置正确的数据库设置。 在您喜欢的文本编辑器中打开应用程序的数据库配置文件。...,您的应用程序已正确配置,并连接到PostgreSQL数据库。

    3.4K00

    “技术邪教” Ruby on Rails 之父再出激进言论引争议

    在近日的 Rails World 大会上,Ruby on Rails 之父、37signals 联合创始人兼首席技术官 DHH(David Heinemeier Hansson)发表了观点称,最快的打包工具就是没有构建...这不是正确的方向、也不是理想的发展状态。...没有构建的理念正在迅速普及,如今也已经进入了 CSS,并推出了大受欢迎的 CSS 嵌套功能。现在所有浏览器都支持 CSS 编译,所有浏览器都支持自定义属性即变量。...“之前我们就考虑过使用嵌套和变量来回避构建。事实证明没有构建不仅是可能的,而且具有极其重大的意义,我们耗费了约十年时间才破解这种复杂性。” DHH 表示,绝大多数静态站点不需要花哨的构建管道。...拥有一种巧妙的石器时代技术,可在 5 秒内自动推送更新。只需为其提供一个小型虚拟机即可,每月花费应该不会超过 5 美元。”

    29110

    如何在CentOS 6.5上使用 Nginx+Passenger 部署Railes应用程序

    介绍 对于某个计算机编程领域的新手来说,挑战永远不会结束。本文的主题是Rails,以及如何在线获取基于Ruby On Rail的 Web应用程序 - 这是最简单,最快捷的方式。...准备Deployment Server 更新和准备操作系统 设置Ruby环境和Rails 下载并安装服务器应用程序 3....· 更新操作系统 · 获取必要的基本部署工具 · 安装Ruby,Rails和库 · 安装应用程序(即乘客)和HTTP服务器(Nginx)...要测试Passenger的下载和设置是否正确,请尝试运行passenger。...db:migrate 要测试您的应用程序是否设置正确并且一切正常,请输入app目录并用rails s运行一个简单的服务器: # Enter the application directory cd /

    5K20

    如何在CentOS 6.5上使用Unicorn和Nginx部署Rails应用程序

    这允许请求不会堆积繁忙的workers。 Nginx HTTP Server作为前端反向代理运行 Nginx是一个性能非常高的Web服务器反向代理。...准备部署服务器 在本节中,我们将执行以下步骤: 更新操作系统 获取必要的基本部署工具 安装Ruby,Rails和库 安装应用程序(即Unicorn)和HTTP服务器(Nginx) 更新和准备操作系统 运行以下命令以更新...要安装它们,请运行以下命令: yum install -y curl-devel nano sqlite-devel libyaml-devel 设置Ruby环境和Rails 我们将使用Ruby Version...首先需要一个JavaScript解释器才能工作,我们还需要设置Node.js。...=production rake db:migrate # Create a directory to hold the PID files mkdir pids 要测试您的应用程序是否设置正确并且一切正常

    4.1K20

    如何在Ubuntu 14.04上使用MySQL和Ruby on Rails应用程序

    本教程将向您展示如何在Ubuntu 14.04服务器上设置开发Ruby on Rails环境,以允许您的应用程序使用MySQL数据库。首先,我们将介绍如何安装MySQL和MySQL适配器gem。...然后我们将向您展示如何创建使用MySQL作为其数据库服务器的rails应用程序。 准备 一台已经设置好可以使用sudo命令的非root账号的Ubuntu服务器,并且已开启防火墙。...首先,更新apt-get: sudo apt-get update 然后安装MySQL及其开发库: sudo apt-get install mysql-server mysql-client libmysqlclient-dev...然后重新访问上一小节(配置数据库连接)以确保密码输入database.yml正确。确保密码正确后,尝试再次创建应用程序数据库。...IP地址在Web浏览器中访问您的Rails应用程序: http://server_public_IP:3000 如果您看到“欢迎登陆”Ruby on Rails页面,您的应用程序已正确配置,并连接到MySQL

    4.9K00

    Rails路由

    对于嵌套路由,可以不断嵌套: resources :publishers do resources :magazine do resources :photos end...end 但是显然嵌套太深是非常麻烦的,经验告诉我们嵌套资源层级不应该超过一层,而避免嵌套过深的方法之一就是把动作集合放在父资源中,这样既可以表明层级关系,又不必嵌套成员动作: resources :articles...articles, shallow: true do resources :comments resources :quotes end 也可以使用 shallow 方法创建作用域,使得所有嵌套均为浅层嵌套...photos/*other', to: 'photos#unknown' 这个路由会匹配 photos/12 和 /photos/long/path/to/12 路径,并把 params[:other] 分别设置为...,仍然映射到 new 和 edit 动作上 限制创建的路由 Rails 默认会为每个 REST 式路由创建7个默认动作,可以使用 :only 和 :except 选项来微调此行为。

    4.5K20

    35 道咱们必须要清楚的 React 面试题

    主题: React 难度: ⭐⭐⭐ 在 HTML 中,表单元素如 、和通常维护自己的状态,并根据用户输入进行更新。...包含表单的组件将跟踪其状态中的输入值,并在每次回调函数(例如onChange)触发时重新渲染组件,因为状态被更新。以这种方式由 React 控制其值的输入表单元素称为受控组件。...主题: React 难度: ⭐⭐⭐ 如果试图直接更新 state ,则不会重新渲染组件。...componentDidMount:在第一次渲染之后执行,可以在这里做AJAX请求,DOM 的操作或状态更新以及设置事件监听器。...主题: React 难度: ⭐⭐⭐⭐ 当应用程序在开发模式下运行时,React 将自动检查咱们在组件上设置的所有 props,以确保它们具有正确的数据类型。

    2.5K21

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

    第6步 - 设置Rails环境 创建一个目录来存储与PromDash关联的SQLite3数据库。...环境变量设置为production。...在显示的表单中,为您的目录命名,例如My Dashboards,然后单击Create Directory。 提交表单后,您将被带回主页。立即单击“ 新建仪表板”按钮以创建新仪表板。...在显示的表单中,为仪表板命名,例如Simple Dashboard,然后从下拉菜单中选择刚刚创建的目录。 提交表单后,您将能够看到新的仪表板。 您的信息中心已有一个图表,但需要进行配置。...现在单击图表标题中的Refresh图标(最左边的一个)来更新图形。您的仪表板现在包含一个完全配置的图表。您可以通过单击底部的“ 添加图表”按钮添加更多图表。

    4.3K00

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

    第6步 - 设置Rails环境 创建一个目录来存储与PromDash关联的SQLite3数据库。...环境变量设置为production。...在显示的表单中,为您的目录命名,例如My Dashboards,然后单击Create Directory。 提交表单后,您将被带回主页。立即单击“ 新建仪表板”按钮以创建新仪表板。...在显示的表单中,为仪表板命名,例如Simple Dashboard,然后从下拉菜单中选择刚刚创建的目录。 提交表单后,您将能够看到新的仪表板。 您的信息中心已有一个图表,但需要进行配置。...现在单击图表标题中的Refresh图标(最左边的一个)来更新图形。您的仪表板现在包含一个完全配置的图表。您可以通过单击底部的“ 添加图表”按钮添加更多图表。

    6.5K00

    我的react面试题整理2(附答案)

    React.createClass与React.Component区别:① 函数this自绑定React.createClass创建的组件,其每一个成员函数的this都有React自动绑定,函数中的this会被正确设置...受控组件更新state的流程:可以通过初始state中设置表单的默认值每当表单的值发生变化时,调用onChange事件处理器事件处理器通过事件对象e拿到改变后的状态,并更新组件的state一旦通过setState...方法更新state,就会触发视图的重新渲染,完成表单组件的更新受控组件缺陷: 表单元素的值都是由React组件进行管理,当有多个输入框,或者多个这种组件时,如果想同时获取到全部的值就必须每个都要编写事件处理函数...(注:这里之所以多次 +1 最终只有一次生效,是因为在同一个方法中多次 setState 的合并动作不是单纯地将更新累加。比如这里对于相同属性的设置,React 只会为其保留最后一次的更新)。...当应用程序在开发模式下运行时,React 将自动检查咱们在组件上设置的所有 props,以确保它们具有正确的数据类型。

    4.4K20

    「首席架构师推荐」React生态系统大集合

    for React应用程序 react-cache-me-outside - React应用程序的OTA数据更新。...- 一个简单,超灵活,可扩展的基于配置的表单生成器 React - React形式 - React中的角状React形式 unform - ReactJS表单库,用于创建不受控制的表单结构,包含嵌套字段...React + Flux由Rails API支持:第1部分 Reails + Flux由Rails API支持:第2部分 Reails + Flux由Rails API支持:第3部分 Flux解决方案通过实例比较...redux-thunk - 用于redux的Thunk中间件 redux-logger - 用于redux的Logger中间件 reselect - Redux的选择器库 normalizr - 根据模式规范化嵌套...JSConf.Asia 2013 Tom Occhino和Jordan Walke:Facebook上的JS应用程序 - JSConfUS 2013 React:JS中的CSS Pete Hunt:可预测,不正确

    12.4K30

    20道高频React面试题(附答案)

    React Hooks在平时开发中需要注意的问题和原因(1)不要在循环,条件或嵌套函数中调用Hook,必须始终在 React函数的顶层使用Hook这是因为React需要利用调用顺序来正确更新相应的状态,...是最新的值,所以tabColumn每次也是最新的值,但是实际tabColumn是最开始的值,不会随着columns的更新更新:const TableDeail = ({ columns,}:TableData...受控组件更新state的流程:可以通过初始state中设置表单的默认值每当表单的值发生变化时,调用onChange事件处理器事件处理器通过事件对象e拿到改变后的状态,并更新组件的state一旦通过setState...方法更新state,就会触发视图的重新渲染,完成表单组件的更新受控组件缺陷: 表单元素的值都是由React组件进行管理,当有多个输入框,或者多个这种组件时,如果想同时获取到全部的值就必须每个都要编写事件处理函数...而不是为每个状态更新编写一个事件处理程序。React官方的解释:要编写一个非受控组件,而不是为每个状态更新都编写数据处理函数,你可以使用 ref来从 DOM 节点中获取表单数据。

    1.8K10

    如何在Ubuntu 14.04上使用Git Hooks部署Rails应用程序

    在我们的教程设置中,我们将使用一个名为deploy的用户。如果要在不输入密码的情况下进行部署,请务必设置SSH密钥。...使用以下命令退出PostgreSQL控制台: \q 现在,我们已准备好使用正确的数据库连接信息配置您的应用程序。...更新数据库配置 在您的开发计算机上,如果您还没有,请更改到您的应用程序目录。...我们暂时不会重启Nginx,因为服务器上还没有应用程序。我们接下来准备申请。...当生产远程接收推送时,它将执行我们之前设置的post-receivehook脚本。如果正确设置了所有内容,现在应该可以在生产服务器的公共IP地址上使用您的应用程序。

    2.5K60

    Github 移除 JQuery 的过程

    另外,如果我们更新了页面标记,并且意外地漏掉了js小部件的类名,浏览器中的异常是否会通知我们出了问题?...相反,我们: 设置指标,跟踪每行代码使用jQuery调用的比率,并随时间监视该图,以确保它要么保持不变,要么下降,而不是上升。 我们不鼓励在任何新代码中导入jQuery。...大量与rails行为接口的旧代码,我们的Ruby on rails适配器采用“不引人注目”的JS方式,将AJAX生命周期处理程序附加到某些表单: 我们不必一次将所有这些调用站点重写为新方法,而是选择触发假...这有双重目的:加快JavaScript的执行速度,同时确保不会创建新的代码来尝试使用删除的功能。 根据我们的网站分析,一旦可行,我们就不断放弃对旧版Internet Explorer的支持。...例如,默认显示原始时间戳,并升级以将时间转换为本地时区,而 嵌套在元素中时,即使没有JavaScript也具有交互作用,但通过辅助功能增强进行升级。

    2.1K10

    vue10CRUD+表单验证

    新增更新功能  4. 删除功能 ​编辑  5. 表单验证  5. 接口文档 ---- 1. 准备工作 后台服务接口,对书本的增删改查操作 2....弹出窗口 进入ElementUi官网, 找到Dialog对话框,可以参考“嵌套表单的dialog”实现。 该步骤先实现弹出窗口的前端逻辑,并不会调用后台接口服务进行实际的业务操作。...; this.optiontype = 'add'; }, //打开对话框,将对话框标题设置为修改,操作类型设置为'update', //并使用获取的待修改的记录的值设置对应的表单元素...新增更新功能 1) 在action.js中加入后台接口配置。...返回参数: 正确:说明返回的json数据 错误:指明不同错误的代码及含义 以上就是今天的分享!!!

    2.4K20
    领券