首页
学习
活动
专区
工具
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路由

, :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.5K20
  • 不是 Ruby,而是你数据库

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

    13730

    总结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 重新执行即可!

    10.1K40

    GitLab安装与基础使用

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

    8.5K20

    Gitlab 升级那些事儿

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

    1.6K20

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

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

    9.6K55

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

    聊聊近期公开几个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.6K30

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

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

    5K20

    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

    4K63

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

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

    6.2K10

    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

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

    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.4K00

    Mantis安装记要

    另外还有一些国产货如BugFree,BugMan,开源我推荐是mantis,听说比bugzilla好,也比jira好,是2000年左右开发一直到现在都在更新项目在错误追踪系统中,Mantis绝对是个轻量级工具...0、介绍 Mantis是一个基于php/MySQL/web开源错误追踪系统。...安装好了我们要运行平台接下来就是安装Mantis了。由于Mantis对中文支持不是很好,所以安装过程还是有的复杂。若用网上默认方式进行安装就会出现乱码或者根本无法写入中文信息问题。...6,测试:再次输入index.php,这个时候将不会再出现要求数据库配置页面, 如果出现登录页面,则一切OK!...3、应用   以administrator用户登录,密码为root,新建一个用户,权限为administrate。以新用户登录,删除administor.

    1K10
    领券