我正在使用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和消费者应用程序的源。
也值得一问:我是否刚刚把这个复杂化了?