首页 > 解决方案 > 模型的 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 和消费者应用程序的源。

也值得问:我是不是把这件事复杂化了?

标签: ruby-on-railsactiveresource

解决方案


推荐阅读