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

Rails 6/ Administrate :安装管理字段嵌套的has_many时出现链轮错误

Rails是一种基于Ruby语言的开发框架,用于构建Web应用程序。Rails 6是Rails框架的一个版本,它引入了一些新功能和改进。

Administrate是一个用于生成管理界面的Ruby gem,它可以帮助开发人员快速构建和管理后台管理系统。它提供了一组简单易用的工具和模板,可以自动生成管理界面,并支持自定义字段和关联关系。

当使用Administrate管理字段嵌套的has_many关联时,有时可能会遇到链轮错误(Chain Wheel Error)。链轮错误通常发生在关联关系中存在循环引用的情况下。例如,如果一个模型A通过has_many关联到模型B,而模型B又通过has_many关联到模型A,就会导致链轮错误。

解决链轮错误的方法之一是使用through选项来创建一个中间模型,以打破循环引用。通过在关联关系中添加through选项,可以指定一个中间模型来处理关联关系。

以下是解决链轮错误的示例代码:

代码语言:txt
复制
# 在模型A中定义关联关系
class ModelA < ApplicationRecord
  has_many :model_bs, through: :model_a_model_bs
end

# 在模型B中定义关联关系
class ModelB < ApplicationRecord
  has_many :model_as, through: :model_a_model_bs
end

# 创建中间模型
class ModelAModelB < ApplicationRecord
  belongs_to :model_a
  belongs_to :model_b
end

通过使用中间模型,可以解决链轮错误,并正确地管理字段嵌套的has_many关联。

关于Rails 6和Administrate的更多信息,您可以参考以下链接:

请注意,以上提供的链接是腾讯云相关产品和产品介绍链接地址。

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

相关·内容

Rails路由

, :videos 等价于: resources :photos resources :books resources :videos 单数资源 使用 resource 方法可以创建单数资源,这会创建6个不同路由...把控制器放入同一命名空间是非常常见,如将管理员有关控制器置于 Admin:: 命名空间中,这样可以把控制器文件放在 app/controllers/admin 文件夹中,在路由中这样声明: namespace...end 但是显然嵌套太深是非常麻烦,经验告诉我们嵌套资源层级不应该超过一层,而避免嵌套过深方法之一就是把动作集合放在父资源中,这样既可以表明层级关系,又不必嵌套成员动作: resources :articles...方法传入一组对象,Rails会自动确定对应路由: Rails能够识别各个实例,自动使用...通配符片段可以出现在路由中任何位置: get 'books/*section/:title', to: 'books#show' 重定向 在路由中可以使用 redirect 辅助方法进行重定向 get

4.4K20

不是 Ruby,而是你数据库

然而,Rails 魔力使其从此开始使用这一特性。每次页面加载都会导致大约 2 秒钟数据库查询,占用数据库服务器上所有 CPU 和 IO。 当然,这是个愚蠢错误。...最糟糕是,这些 “错误” 被团队贴上了 “以 Rails 方式完成” 标签。 Rails 里到处都是这样 footgun(footgun,意即伤自己枪,Rails 称其为“尖刀”。...未优化连接。添加简单 has_many 太容易了,这使得开发人员可以在数据库中启动过于繁重查询。一旦通过应用程序引入和传播,这几乎不可能解决。...使用 Rails,很容易累积许多小错误,从而使数据库成为瓶颈。但是,即使所有这些都在你控制之下,高性能数据库调用仍然比许多其他调用慢很多。...我遇到一些问题是:“我已经知道 Rails,但不知道 Sinatra”,或者“管理要求我们在类似的代码库上运行一切”。实际上,最后一个理由不成立。

11830

总结Web应用中常用各种Cache

delete_static_file方法: redis_cache.set('categories', response.body) redis_cache.del('categories') 这样除了集中管理以外...,比如我们可以在更新或者删除文章评论时候,自动个更新: class Article has_many :commentsendclass Comment belongs_to :article...数据查询缓存 通常来说web应用性能瓶颈都出现在DB IO上,做好数据查询缓存,减少数据库查询次数,可以极大提高整体响应时间。 数据查询缓存分2种: A....如果文章类别都不一样,就会出现N+1查询问题(常见性能瓶颈),rails推荐解决方法是用Eager Loading Associations ( http://guides.rubyonrails.org...,缺点是扩展比较困难,对于只获取少量字段查询无法缓存。

4.7K40

开发项目管理工具redmine 原

Redmine是基于Ruby on Rails框架支持跨平台、跨数据库一款灵活项目管理web应用程序。...在此使用rvm管理ruby,rvm 是一个命令行工具,可以提供一个便捷多版本 Ruby 环境管理和切换,如果你打算学习 Ruby / Rails, RVM 是必不可少工具之一。...卸载一个版本ruby # 安装rake和rails ## 如果嫌默认ruby源慢,可以使用以下方法进行替换 $ gem source -r https://rubygems.org/ # 删除默认...session加密处理: 创建随机key对session加密,防止被篡改 $ bundle exec rake generate_secret_token 初始化数据库字段: $ RAILS_ENV...=production ; 冲突: 如果出现“找不到“.bundle/ ”文件”错误信息,原因是执行命令所在路径不对,切换至 /usr/local/src/redmine 重新执行即可!

10K40

GitLab安装与基础使用

,先从大版本低版升级,再到最后版本升级,以此类推; 因为我中间尝试过直接跨太多个版本升级,出现过异常,其实主要是数据库数据导入备份问题,如果新版本跟旧版相关太大的话就会报错了。...在同一台Centos7机器上卸载了旧版本gitlab后,接着又重新安装新版本gitlab-ce 在安装完后修改配置,初始化配置出现以下错误: Running handlers: There was...,所以直接安装,程序检测到配置文件,数据文件就会跳过没有覆盖,新版本使用旧版本数据文件[因为版本相差太多了]就会无法识别导致。....修改配置文件添加最后两行egrep -v "^#|^ 连接上后找到对应identities表修改对应字段,其实就是把字段user_id修改掉,我这里做法就是把用户user_id改成了负数,这样在...Ldap认证就找不到了,从而走标准认证(这是在不重启Gitlab情况下进行)。

8.4K20

Gitlab 升级那些事儿

这两个秘钥文件涉及到数据库中某些加密字段加密和解密过程,如果没有这两个原始文件或者使用了新文件,那么 Gitlab 将无法对这些数据库中已有的加密字段进行解密,从而影响到某些页面的使用,尤其是管理员界面...修复管理员设置 500 错误   前面已经提到当两个秘钥文件与加密数据库字段密钥文件不一致,加密字段无法被解析,从而导致在管理页面修改任何涉及到加密字段内容都会弹出 500 错误。...官方给出解决方案是将这些加密字段都置空,加密字段无法置空记录均删除。...连接数据库   以下为官方给定在不同版本和安装方式下连接数据库命令。...修复指标和分析 500 错误   指标和分析 500 错误是从升级到 14.0.5 版本之后开始出现,主要是因为在指标和分析中新增了指向 tmpfs 配置项 prometheus_multiproc_dir

1.5K20

企业自建GitLab代码仓库安装与基础配置使用

(这里是我建议,一般差不多最后几版就可以了),接下来就是跨大版本升级,先从大版本低版升级,再到最后版本升级,以此类推; 因为我中间尝试过直接跨太多个版本升级,出现过异常,其实主要是数据库数据导入备份问题...Centos7机器上卸载了旧版本gitlab后,接着又重新安装新版本gitlab-ce 在安装完后修改配置,初始化配置出现以下错误: Running handlers: There was an...,所以直接安装,程序检测到配置文件,数据文件就会跳过没有覆盖,新版本使用旧版本数据文件因为版本相差太多了就会无法识别导致。...gitlabhq_production和用户名都是默认,密码为空 连接上后找到对应identities表修改对应字段,其实就是把字段user_id修改掉,我这里做法就是把用户user_id改成了负数...,这样在Ldap认证就找不到了,从而走标准认证(这是在不重启Gitlab情况下进行)。

9K55

gitlab安装详解

一、介绍 GitLab是利用Ruby On Rails开发一个开源版本管理系统,实现了一个自托管Git项目仓库,是集代码托管,测试,部署于一体开源git仓库管理软件,可通过web界面来进行访问公开或私人项目...与Github类似,GitLab能够浏览代码,管理缺陷和注释。可以管理团队对仓库访问,它非常易于浏览提交过版本,并提供一个文件历史库。...它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后需要时候查找。 注意: 搭建Gitlab,需要至少4G内存,否则可能会出现奇妙错误。...二、系统环境 centos7.4,2核4G 三、安装 1、下载依赖包核允许HTTP核ssh访问 1 2 3 4 5 6 7 8 sudo yum install curl policycoreutils...6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [root@localhost ~]# gitlab-rails

1.1K20

手把手教你在centos7上安装GitLab服务器

功能:Gitlab 是一个提供代码托管、提交审核和问题跟踪代码管理平台。对于软件工程质量管理非常重要。 版本:GitLab 分为社区版(CE) 和企业版(EE)。...如果找不到unicorn['port'],可以先执行gitlab-ctl reconfigure 7、执行 gitlab-ctl reconfigure 注:6、7步骤执行顺序可以颠倒,如果先执行7步骤...出现 Error executing action `create` on resource 'group[gitlab-www]'则看后边错误提示内容,根据提示错误内容进行操作即可。...nginx端口已经有修改过了,则还要进行如下配置,否则可能会出现访问gitlab相关一些页面访问不到 vim /opt/gitlab/embedded/service/gitlab-rails/config...'] = 你服务器ssh端口 2、访问gitlab主业出现502 有一定概率是unicorn['port']被占用,可以通过gitlab-ctl tail unicorn 来跟踪unicorn状态

3.5K31

聊聊近期公开几个GitLab高额奖金漏洞

issue,它会重写markdown链接用来上传文件,漏洞出现在 lib/gitlab/gfm/uploads_rewriter.rb 中(居然是用ruby写),对复制文件未考虑到跨目录问题,导致可以上传任意文件到对应链接上...rails应用程序访问, 也就是说,所有对 Rails 组件请求都得经过 Workhorse,但有时也可能被绕过。...比如这里用来上传wifi附件漏洞CGI,正常情况下是指定本地文件路径参数file,但当你把这参数字段名改成下面这些原本不存在字段: ;file [file] file] ;file] file...]] file;; 就会触发rewrite_filed字段重置动作,导致原有字段file为nil空值,这会造成hash签名绕过,与此同时Multipart::Handler会去使用get参数中file.path...【漏洞修复】 如果gitlab把file.path参数放在post中应该也能防御,最后他们是添加对字段检查判断,必须是顶级参数,而不是foo[bar]这种嵌套方式。 ?

4.5K30

ruby on rails + mysql 开发环境搭建

(代码写完了并保存为.rb文件以后,直接F5就可以运行) 2.安装rails,命令行键入: gem install rails 不知道什么原因,我机器(windows 2008 sp2)上一直提示如下错误...覆盖安装完成以后,再次运行gem install rails,居然可以了(不过该过程要联网下载,时间会比较长),完成后,命令行键入rails -v 验证版本 ?...成功后,mongrel服务器将在本机3000端口监听http请求,访问http://localhost:3000/ 试下,如果出现以下画面,则rails环境基本ok了 ?...版本,rails框架对5.1版本mysql支持并不好,在rake db:migrate总提示出错 5.2 找一款适合自己mysql管理工具,如果你是php程序员,phpmysqladmin也许很适合你...6.配置ruby下mysql连接 6.1 把Mysql安装目录中bin目录下libmysql.dll 复制到ruby安装目录bin目录下(一般是c:\ruby\bin下) 6.2 到http://

3.8K50

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

使用Ruby编程语言和Rails Web应用程序开发框架开始使用您应用程序之后,当需要与世界其他地方共享您应用程序时,可能会出现无数可能组合。...准备部署应用程序 创建示例应用程序/上传源代码 创建Nginx管理脚本 配置Nginx Web应用程序部署,服务器及其角色 在部署Web应用程序或将其置于联机状态,通常会有多层应用程序用于此目的。...您仍然需要您应用程序和数据库正常运行才能让Nginx为客户端提供非错误消息响应。...由于腾讯云服务器配有快速SSD磁盘,因此在执行服务器应用程序安装任务,这并不是问题。...腾讯云将负责绝大部分处理复杂而耗时管理工作,如 PostgreSQL 软件安装、存储管理、高可用复制、以及为灾难恢复而进行数据备份,让您更专注于业务程序开发。

4.9K20

01 . GitLab简介及环境部署

网站最终丢失了最后6数据库数据(包括问题、合并请求、评论、片段等,不含代码库) GitLab是由 GitLab Inc.开发,使用 MIT 许可证基于网络 Git 仓库管理工具开源项目,且具有...wiki 和 issue 跟踪功能,使用 Git 作为代码管理工具,并在此基础上搭建起来 web 服务。...GitLab原理: GitLab是一个用于仓库管理系统开源项目,使用Git作为代码管理工具,并在此基础上建立web服务....#备份完成出现在指定目录下文件 [root@gitlab backups]# ls 1541872172_2018_11_11_11.4.5_gitlab_backup.tar #这个压缩包包含..."1541872172"是一个时间戳,从1970年1月1日0到当前时间秒数 从备份文件恢复 [备份和恢复GitLab版本尽量保持一致] [root@gitlab ~]# cd /var/opt/gitlab

3.9K63

GitLab企业级私有代码仓库安装与基础使用

当成员离开团队,将自动取消分配所有分配问题和合并请求。...PS : 但是需要注意是新服务器上Gitlab版本必须与创建备份Gitlab版本号相同....在同一台Centos7机器上卸载了旧版本gitlab后,接着又重新安装新版本gitlab-ce 在安装完后修改配置,初始化配置出现以下错误: Running handlers: There was...,所以直接安装,程序检测到配置文件,数据文件就会跳过没有覆盖,新版本使用旧版本数据文件[因为版本相差太多了]就会无法识别导致。...gitlabhq_production和用户名都是默认,密码为空 连接上后找到对应identities表修改对应字段,其实就是把字段user_id修改掉,我这里做法就是把用户user_id改成了负数

6K10

CentOS7安装GitLab、汉化、邮箱配置及使用

一.GitLab简介 GitLab是利用Ruby On Rails开发一个开源版本管理系统,实现了一个自托管Git项目仓库,是集代码托管,测试,部署于一体开源git仓库管理软件,可通过web...与Github类似,GitLab能够浏览代码,管理缺陷和注释。可以管理团队对仓库访问,它非常易于浏览提交过版本,并提供一个文件历史库。...如果使用更少内存,GitLab将在重新配置运行期间给出奇怪错误,我用虚拟机来分别新建1G,2G内存CentOS系统来装GitLab,确实非常捉襟见肘啊,伤不起。.../ -rf 复制可能不断提示是否要覆盖,这时可能是系统每次执行cp命令,其实是执行了cp -i命令别名。...出现这种情况可以修改~/.bashrc,在“alias cp=’cp-i’”前加#注释即可。 复制可能出现如下提示,可以不用理会。 ?

1.6K70

CentOS7安装GitLab、汉化、邮箱配置及使用

一.GitLab简介 GitLab是利用Ruby On Rails开发一个开源版本管理系统,实现了一个自托管Git项目仓库,是集代码托管,测试,部署于一体开源git仓库管理软件,可通过web界面来进行访问公开或私人项目...与Github类似,GitLab能够浏览代码,管理缺陷和注释。可以管理团队对仓库访问,它非常易于浏览提交过版本,并提供一个文件历史库。...如果使用更少内存,GitLab将在重新配置运行期间给出奇怪错误,我用虚拟机来分别新建1G,2G内存CentOS系统来装GitLab,确实非常捉襟见肘啊,伤不起。.../ -rf 复制可能不断提示是否要覆盖,这时可能是系统每次执行cp命令,其实是执行了cp -i命令别名。...出现这种情况可以修改~/.bashrc,在“alias cp=’cp-i’”前加#注释即可。 复制可能出现如下提示,可以不用理会。

6.3K00
领券