ActiveResource несколько вложенных маршрутов для модели - PullRequest
0 голосов
/ 18 октября 2018

Я использую 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, так и пользовательского приложения.,

тоже стоит спросить: я просто слишком усложнил это?

...