ruby-on-rails - 模型的 ActiveResource 多个嵌套路由
问题描述
我ActiveResource
用来从内部 API 中提取对象
此 API 具有以下(简化):
class Project < ApplicationRecord
has_many :contributions
...
end
class Contribution < ApplicationRecord
belongs_to :project
belongs_to :user
...
end
class User < ApplicationRecord
has_many :contributions
...
end
和路线,因此只能创建与项目相关联的贡献
resources :projects, except: [:new, :edit] do
resources :contributions, except: [:new, :edit, :destroy]
end
resources :users, except: [:new, :edit] do
resources :contributions, only: [:index, :show]
end
resources :contributions, only: [:index, :show, :update]
是否可以提交动态前缀以便我可以有选择地点击这些路径?即projects/:project_id/contributions
在创建时,但/contributions
在索引上(全部)。
编辑:
我的活动资源都是这样的:
class Contribution < ActiveResource::Base
self.site = "#{base_url}/api/v1/"
self.headers['Authorization'] = "Token token=\"#{TokenGenerator}\""
...
end
那里没有太多的定制。
我最关心的是post
我希望始终嵌套在项目中的创建。
目前我正在检查/contributions
路由中的参数,看看它们中是否有任何可行的“parent_id”,并确定是否存在所述父级。
我猜这个 gem 的设计并不是考虑到资源具有多条路线的想法。我总是可以包括:
class Project ActiveResource::Base
self.site = "#{base_url}/api/v1/"
self.headers['Authorization'] = "Token token=\"#{TokenGenerator}\""
...
def contributions
Contributions.all(params: {project_id: id})
end
end
内部Projects.rb
并确保 API 控制器知道如何处理父级(如果存在),但这仅仅是因为我可以访问 API 和消费者应用程序的源。
也值得问:我是不是把这件事复杂化了?
解决方案
推荐阅读
- 2d - 如何在 2D 游戏中停止正在减速的物体?
- json - 将 Spring Data 与 PostgreSQL JsonB 类型属性一起使用
- typescript - 打字稿中的条件类型
- excel - 自更新计算字段
- html - 如何在 CSS 中的圆形图像上使用 box-shadow?
- javascript - Node.js - eventListener - 如何在触发事件时登录文件
- java - 在带有打印视图的浏览器中自动创建屏幕截图
- javascript - timer/promises.setTimeout 延迟不适用于功能
- amazon-web-services - 无法从 IntelliJ 将远程调试器附加到 AWS ESC docker 映像?
- python - ValueError:参数的类型不受支持(整数类型 id)