ruby-on-rails - hacking gitlab - 在问题模型中添加一个字段

标签 ruby-on-rails rails-activerecord gitlab

所以我发现自己需要在 gitlab 问题模型中添加一个“自定义”字段(外部票证引用)。

不是一个 ruby 人,我一直在努力解决这个问题,到目前为止,但已经撞到了砖墙。

我添加了一个迁移文件

class AddExternalRefToIssues < ActiveRecord::Migration
  def change
    add_column :issues, :external_ref, :string
    add_index :issues, :external_ref
  end
end

并设法通过运行这些命令将其加载到数据库中
rm /var/opt/gitlab/gitlab-rails/upgrade-status/*
gitlab-ctl reconfigure

我检查了 postgres 表
 id | [snip] | external_ref 
----+-------+--------------
  1 |        | 
(1 row)

所以专栏在那里。确实,因为我可以读写 external_ref rails 控制台中的属性
irb(main):018:0> i = Issue.find(1)
=> #<Issue id: 1, title: "demo", ...[snip]..., external_ref: "123">

但现在我不知道下一步该做什么,因为 api 调用 api/v4/projects/1/issues/1返回
{"id":1,"iid":1,"project_id":1,"title":"demo",[snip] , "subscribed":true}

即我的 external_ref字段未显示

我尝试过黑客攻击,修改了几个文件,如 app/serializers/issue_entity.rb并添加 expose :external_ref并重新启动 gitlab 无效

有人能指出我如何获得并为这个新属性赋值的正确方向吗?

我也很感激有人告诉我如何添加一个允许我在这个领域进行搜索的 api。

谢谢

最佳答案

所以,我最终解决了它。

创建一个名为/opt/gitlab/embedded/service/gitlab-rails/db/migrate/20170505102713_add_external_ref_to_issues.rb 的新文件

内容如下:

class AddExternalRefToIssues < ActiveRecord::Migration
  def change
    add_column :issues, :external_ref, :string
    add_index :issues, :external_ref
  end
end

进行以下更改

/opt/gitlab/embedded/service/gitlab-rails/lib/api/entities.rb
class IssueBasic < ProjectEntity
  expose :external_ref

/opt/gitlab/embedded/service/gitlab-rails/lib/api/entities.rb
  params :issues_params do
    optional :external_ref, type: String, desc: 'external reference'

  params :issue_params do
    optional :external_ref, type: String, desc: 'external reference'

执行
rm /var/opt/gitlab/gitlab-rails/upgrade-status/*
gitlab-ctl reconfigure
gitlab-ctl restart

现在你可以写和读 external_ref柱子

关于ruby-on-rails - hacking gitlab - 在问题模型中添加一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43812371/

相关文章:

javascript - 避免下载 pdf 和图像

ruby-on-rails - 如何使用 ActiveRecord/Rails 表达 NOT IN 查询?

ruby-on-rails - 在每个现有属性上获取 NoMethodError(未定义的方法)

Docker 中的 Docker 无法推送

git - 限制 GitHub 或 Bitbucket 存储库的访问

ruby-on-rails - 获得 Pundit 授权使用 Namespaces on Rails 5

ruby-on-rails - 如何将 CoffeeScript 规范与 Jasmine-Rails 一起使用

docker - gitlab-runner docker-machine 错误

ruby-on-rails - 如何在 Rails 的特定时区安排工作人员的时间?

ruby-on-rails - 我如何获得 Ruby 类的名称?