Вложенные маршруты активного ресурса - PullRequest
2 голосов
/ 16 августа 2010

Я сейчас пытаюсь интегрироваться со сторонним API, используя активный ресурс.

Я выполнил большую часть работы, но борюсь с одним вложенным ресурсом.

/company/:company_id/users/:id

Я могу получить пользователей из компании, используя

API :: Company.find (124343) .users

но любые последующие изменения для пользователя не сохранятся.

Я знаю, что мне нужно поиграть с атрибутом Base.site, чтобы принять аргумент, я просто не могу найти, как установить атрибут. Например, в записи пользователя он имеет значение company_id. Таким образом, получить company_id очень просто, я просто не могу понять, как заставить URL-адрес правильно его содержать, и поэтому он не идет по правильному маршруту, а идет куда-то вроде

/company//users/32435

1 Ответ

1 голос
/ 17 июля 2013

Попробуйте это

Class ABC
require "rubygems"
#This code block just makes sure not to append .json to the call
class << self
  def element_path(id, prefix_options = {}, query_options = nil)
    prefix_options, query_options = split_options(prefix_options) if query_options.nil?
    "#{prefix(prefix_options)}#{collection_name}/#{id}#{query_string(query_options)}"
   end

  def collection_path(prefix_options = {}, query_options = nil)
    prefix_options, query_options = split_options(prefix_options) if query_options.nil?
    "#{prefix(prefix_options)}#{collection_name}#{query_string(query_options)}"
  end
end

#Ur site url 
ActiveResource::Base.site = 'http://aaa:8080/'
self.format = :json
self.collection_name= "/company/"

def self.find(company_id, id)
  x = superclass.find(:all, :from => '/company/%s/users/%s' %[company_id,id])
  x
  end
end 

В вашем контроллере вы будете делать

 @test=ABC.find(params[:customer_id],params[:id]) 

и это вернет данные из API. Дайте мне знать, если это работает для вас.

...