ActiveResource用于模型的多个嵌套路由

时间:2018-10-18 14:50:12

标签: 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”,并确定该父级是否存在。

我猜这不是在设计具有多个路由资源的想法时设计的。我总是可以包括:

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和消费者应用程序的源。

也值得一问:我是否刚刚把这个复杂化了?

0 个答案:

没有答案