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

当我使用SimpleDelegator时,Rails生成id错误的路径

当使用SimpleDelegator时,Rails生成id错误的路径是因为SimpleDelegator类是Ruby的一种装饰器模式,它允许我们在不修改原始对象的情况下添加额外的功能。在Rails中,SimpleDelegator常用于代理模型对象,以便在视图中访问关联模型的属性和方法。

当使用SimpleDelegator代理模型对象时,Rails默认使用代理对象的id属性来生成路径。然而,如果代理对象没有定义id属性或id属性返回nil,Rails将无法生成正确的路径。

要解决这个问题,可以在代理对象中定义id方法,使其返回正确的id值。例如,如果代理对象是一个ActiveRecord模型,可以通过重写id方法来返回模型的id值:

代码语言:txt
复制
class MyModelDecorator < SimpleDelegator
  def id
    __getobj__.id
  end
end

然后,在视图中使用MyModelDecorator代理对象时,Rails将能够正确生成id路径。

关于SimpleDelegator的更多信息,可以参考Ruby官方文档:SimpleDelegator

腾讯云相关产品和产品介绍链接地址暂无。

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

相关·内容

​你回去了解一下RESTful风格

/items/l 从上述两个请求中可以看出,RESTful风格中的URL将请求参数id=1变成了请求路径的一部分,并且URL中的queryltems也变成了items( RESTful风格中的URL不存在动词形式的路径...通用错误响应 503 (Service Unavailable)- 服务端当前无法处理请求 POST 不安全且不幂等 使用服务端管理的(自动产生)的实例号创建资源 创建子资源 部分更新资源 如果没有被修改...例如为我的博文增加一个java的分类,生成的路径就是分类名/categories/java,那么就可以采用PUT方法。...我认为,这是因为rails默认使用服务端生成的ID作为URI的缘故,而不少人就是通过rails实践REST的,所以很容易造成这种误解。 客户端不一定都支持这些HTTP方法吧?...方法中的@PathVariable("id")注解则用于接收并绑定请求参数,它可以将请求URL中的变量映射到方法的形参上,如果请求路径为"/user/{id}",即请求参数中的id和方法形参名称id一样

83210

使用rails实现最简单的CRUD

和数据库的迁移文件 log:日志文件 package.json:npm包记录,使用yarn管理 public:静态文件 test:测试 使用 rails server 命令启动服务器即可在本地...替换首页 使用命令生成控制器hello rails generate controller hello rails自主生成了部分文件: ?...的视图文件,将视图文件写入以下内容 hello, rails 此时,浏览器中打开 / 和 /hello/index/ 路径都将返回同样的内容 ?...文章的增加 使用以下生成数据库模型: rails generate model Article title:string content:text 使用以下迁移数据库: rails db:migrate...使用以下命令生成控制器: rails generate controller Articles 配置articles的路由: resources :articles 使用 rails routes 命令查看当前的路由配置

3.2K40
  • 架构之美:教你如何分析一个接口?

    REST刚出来的时候,开发者普遍觉得这是一个好的想法,但怎么落地呢?没有几个人想得清楚。 Rails对REST的使用方式做了一个约定。...当年我接触Rails时,最让我感到震惊的是它的数据库查询方式,与传统开发的风格截然不同,就这么简单的一句: Article.find_by_title("foo") 要知道,那个时候用Java写程序,即便是想做一个最简单的查询...当我们需要有更多的查询条件时,只要一个一个附加上去就可以了。...Java后期的一些开源项目也开始向Rails学习。比如,使用Spring Data JPA的项目后,我们也可以写出类似Rails的代码。...使用Rails,这就是一个命令: $ rails new article-app 这个命令执行的结果生成的不仅仅是源码,还有一些鼓励你去做的最佳实践,比如: 它选择了Rake作为自动化管理的工具,生成了对应的

    2.2K20

    Docker 搭建 GibLab 代码管理仓库

    GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。...环境 配置域名的原因是可以使配置文件通用,这样在别的机器进行恢复时,就不需要修改配置了,另外配置好域名后,在我们创建好项目时,克隆代码所提示的 ssh 和 http 地址就是带域名的,而不是IP地址。...11.1 修改配置文件 # 进入容器 docker exec -it gitlab /bin/bash # 修改 /etc/gitlab/gitlab.rb ## http使用的端口以及在项目工程显示的...http 下载路径中使用 external_url 'http://code.gitlab.com:8090' ## 项目工程显示的 ssh 地址和端口 gitlab_rails[...# 在主机器上生成密钥(如果已经生成就跳过这一步) ssh-keygen -t rsa # 将密钥拷贝到从机器,实现主机免密登录从机 ssh-copy-id -i ~/.ssh/

    97420

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

    public projects: 只要知道该项目的具体位置就是路径,都可以访问该项目, 它们默认的使用的是guest权限。...当成员离开团队时,将自动取消分配所有分配的问题和合并请求。...在同一台Centos7机器上卸载了旧版本的gitlab后,接着又重新安装新版本的gitlab-ce 在安装完后修改配置,初始化配置时出现以下错误: Running handlers: There was...,所以直接安装时,程序检测到配置文件,数据文件时就会跳过没有覆盖,新版本使用旧版本的数据文件[因为版本相差太多了]就会无法识别导致。...user_id修改掉,我这里做法就是把用户的user_id改成了负数,这样在Ldap认证时就找不到了,从而走标准认证(这是在不重启Gitlab的情况下进行)。

    6.3K10

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

    介绍 在本教程中,我们将向您展示如何使用Git hooks自动将Rails应用程序的生产环境部署到远程Ubuntu 14.04服务器。...当我们将gem添加到应用程序的Gemfile时,需要运行此bundle install命令。由于安装步骤因操作系统而异,因此这是留给读者的练习。...随意替换“appname”为其他名字: cd ~ rails new appname 然后切换到应用程序目录: cd appname 对于我们的示例应用程序,我们将生成一个脚手架控制器,以便我们的应用程序可以显示...我们现在创建并编辑该库存文件: sudo vi /etc/puma.conf 此文件中的每一行都应该是您要用puma-manager管理的应用程序的路径。...当生产远程接收推送时,它将执行我们之前设置的post-receivehook脚本。如果正确设置了所有内容,现在应该可以在生产服务器的公共IP地址上使用您的应用程序。

    2.5K60

    如何写出优雅的 Golang 代码

     建议所有 Go 语言的开发者都在开发时使用 goimports,虽然 goimports 有时会引入错误的包,但是与带来的好处相比,这些偶尔出现的错误在作者看来也是可以接受的;当然,不想使用 goimports... 这种模块拆分的方式其实就是按照层级进行拆分,Rails 脚手架默认生成的代码其实就是将这三层不同的源文件放在对应的目录下:models、views 和 controllers,我们通过 rails...— 无论是 Spring MVC 还是 Rails,同一个项目中命名空间非常扁平,跨文件夹使用其他文件夹中定义的类或者方法不需要引入新的包,使用其他文件定义的类时也不需要增加额外的前缀,多个文件定义的类被...当我们在 Go 语言中处理错误相关的逻辑时,最重要的其实就是以下几点: 使用 error 实现错误处理 — 尽管这看起来非常啰嗦; 将错误抛给上层处理 — 对于一个方法是否需要返回 error 也需要我们仔细地思考...mock 下统一管理,减少祖传命令的出现; 当我们生成了上述的 Mock 实现代码之后,就可以使用如下的方式为 Service 写单元测试了,这段代码通过 NewMockBlog 生成一个 Blog

    1.1K30

    如何写出优雅的 Golang 代码

    建议所有 Go 语言的开发者都在开发时使用 goimports,虽然 goimports 有时会引入错误的包,但是与带来的好处相比,这些偶尔出现的错误在作者看来也是可以接受的;当然,不想使用 goimports...这种模块拆分的方式其实就是按照层级进行拆分,Rails 脚手架默认生成的代码其实就是将这三层不同的源文件放在对应的目录下:models、views 和 controllers,我们通过 rails new...— 无论是 Spring MVC 还是 Rails,同一个项目中命名空间非常扁平,跨文件夹使用其他文件夹中定义的类或者方法不需要引入新的包,使用其他文件定义的类时也不需要增加额外的前缀,多个文件定义的类被...当我们在 Go 语言中处理错误相关的逻辑时,最重要的其实就是以下几点: 使用 error 实现错误处理 — 尽管这看起来非常啰嗦; 将错误抛给上层处理 — 对于一个方法是否需要返回 error 也需要我们仔细地思考...-package=mblog -source=pkg/blog/blog.go > test/mocks/blog/blog.go 当我们生成了上述的 Mock 实现代码之后,就可以使用如下的方式为

    1.6K30

    《Prometheus监控实战》第8章 监控应用程序

    方法、函数或类似票房对指标进行分类并清晰地标识它们,以便了解指标生成的内容和位置 ---- 8.2 指标 我们使用以下两种类型的指标,尽管它们之间有很多重叠 应用程序指标:通常用于衡量应用程序代码的状态和性能...USE和RED方法,以及Google黄金指标 我们还会查看应用程序的功能和状态,一个很好的例子可能是成功的登录,或者错误、崩溃和失败。...最显著的地方是应用程序周围的输出和外部子系统,例如数据库或缓存 如果应用程序发出日志,那么可以识别日志包含的内容,并查看是否可以使用这些内容来衡量应用程序的行为 8.2.6 监控应用程序示例 mwp-rails...然后可以使用Rails控制台来测试客户端,现在通过rails c命令启动一个客户端 代码清单:使用Rails控制台测试Prometheus客户端 ?...惧器将一些HTTP服务器指标添加到通过Rack中间件收集的端点 代码清单:Rails的/metrics端点 ? 使用指标 现在应用程序已生成指标,我们可以在Prometheus中使用它们。

    4.6K11

    【Gitlab】371- GitLab从安装到全自动化备份一条龙

    在/root/.ssh下生成id_rsa 和 id_rsa.pub 两个文件, 其中公共密钥保存在 /root/.ssh/id_rsa.pub,私有密钥保存在/root/.ssh/id_rsa。...在旧服务器上cp生成rsa公钥证书给新服务器 然后在/root/.ssh下复制备份一份id_rsa.pub 命名为 id_rsa.pub.A,以便拷贝到新服务器。...这里使用scp命令需要输入密码,当我们把下面的第三步执行完毕之后,以后旧服务器使用scp命令复制文件到新服务器的话,就不需要再次输入密码。...我们在新服务器的/root/.ssh下创建authorized_keys文件,使用如下命令 touch authorized_keys 将id_rsa.pub.A文件内容追加到authorized_keys...-" >> $LogFile 参考文献 gitlab官网[2] ubuntu16.04中gitlab安装[3] gitlab自动备份[4] 【git学习】在CenterOS系统上恢复GitLab时出现错误

    2.4K30

    Rails路由

    用于生成路径和URL地址的辅助方法 在创建资源路由时,会同时创建多个可以在控制器中使用的辅助方法,如上面的资源路由会创建以下方法: photos_path:返回值为 /photos new_photos_path...url_for 方法时传入一组对象,Rails会自动确定对应的路由: Rails能够识别各个实例...绑定参数 声明普通路由时,可以使用符号作为参数: get 'photos(/:id)', to: :display 在处理 /photos/1 请求时,会把请求映射到 Photos 控制器的 display.../[A-Z]\d{5}/ :contraints 选项的值可以是正则表达式,但不能使用 ^ 符号,比如下面就是错误的: get '/:id', to: 'articles#show', constraints..., except: :destroy 本地化路径 使用 scope 方法,可以修改 resources 方法生成的路径名称: scope(path_names: {new: 'neu', edit: '

    4.5K20

    GitLab安装与基础使用

    public projects: 只要知道该项目的具体位置就是路径,都可以访问该项目, 它们默认的使用的是guest权限。...WeiyiGeek. (3) gitlab-ce版本升级记录 我们为了保证数据安全,一步步来慢慢升级,使用官方的源可能比较慢,可以使用国内的源(采用Omnibus方式进行升级直接rpm包部署):https...在同一台Centos7机器上卸载了旧版本的gitlab后,接着又重新安装新版本的gitlab-ce 在安装完后修改配置,初始化配置时出现以下错误: Running handlers: There was...,所以直接安装时,程序检测到配置文件,数据文件时就会跳过没有覆盖,新版本使用旧版本的数据文件[因为版本相差太多了]就会无法识别导致。...Ldap认证时就找不到了,从而走标准认证(这是在不重启Gitlab的情况下进行)。

    8.5K20

    GitLab → 搭建中常遇的问题与日常维护

    ,只能凭感觉、经验来判断;如果出现如下类似错误信息 * execute[clear the gitlab-rails cache] action run ========================...、配置 GitLab 后,不一定就万事大吉了,访问 GitLab 的时候可能会出现如下错误 ?     ...GitLab 所需内存最低为 4G,若服务器配置太低会出现 502 错误   GitLab 新装或重启后,需要等待 1 分钟才能使用     对于单核 CPU 的服务器,Unicorn and Sidekiq...服务启动最少需要一分钟     这个问题楼主没有遇到,因为开始的时候,楼主就给虚拟机分了 4 核 CPU 那么说白了,只要我们的虚拟机(或真实机器)环境足够干净,硬件资源(内存和 CPU)足够好,就不太会出现如上的错误...(虽然楼主知道大家的英语都很棒,但我相信大家的中文更棒),当语言变成我们最擅长的中文时,相信大家都能很好的进行偏好设置了;语言设置过程如下 ?

    3.1K20

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

    public projects: 只要知道该项目的具体位置就是路径,都可以访问该项目, 它们默认的使用的是guest权限。...主机都是禁用了25端口的,所以这个gitlab.rb的配置就有做相应的改变,使用465协议。...Centos7机器上卸载了旧版本的gitlab后,接着又重新安装新版本的gitlab-ce 在安装完后修改配置,初始化配置时出现以下错误: Running handlers: There was an...,所以直接安装时,程序检测到配置文件,数据文件时就会跳过没有覆盖,新版本使用旧版本的数据文件因为版本相差太多了就会无法识别导致。...user_id修改掉,我这里做法就是把用户的user_id改成了负数,这样在Ldap认证时就找不到了,从而走标准认证(这是在不重启Gitlab的情况下进行)。

    9.9K55
    领券