У меня есть приложение на основе ActiveResource (называемое клиентом), которое взаимодействует с приложением API (называемым api).
У меня есть экземпляр модели, я обновляю экземпляр через форму, форму помещает клиенту с помощью простого контроллера, подобного этому:
def update
@current_user.update_attributes(:psset => params[:permissions])
end
Вместо того, чтобы идти к контроллеру обновлений в API, контроллер обновлений передает ПОЗДРАВЛЯЮЩЕМУ контроллеру в API, а не обновлению, то есть вызывает POST для / users вместо PUT для / users /: id. форма всегда отправляется на этот контроллер, поэтому форма отправляет клиенту должным образом.
Самая сводящая с ума часть - то, что выполнение команды
@current_user.update_attributes(:psset => params[:permissions])
изнутри pry с той же средой для того же ресурса будет PUT в / users /: id на API.
Итак, что-то в этом контроллере обновлений при вызове update_attributes отлавливает это как попытку зарегистрировать новый ресурс и перейти к созданию на API.
Я озадачен тем, почему я не могу обновить с контроллера, но могу из экземпляра командной строки. Это первый случай в этой ситуации с этим контроллером, поэтому в какой-то момент я должен что-то делать, что запускает новый ресурс, но не может понять, что именно. Как обычно, я попытаюсь заполнить более конкретный код на основе вопросов. Я знаю, что, наверное, просто упускаю что-то глупое, но что?
РЕДАКТИРОВАТЬ: запрошенные соответствующие маршруты
апи:
resources :users do #, :only => [:index, :show, :create, :destroy]
collection do
end
end
клиент:
resources :user, :only => [ :show, :update, :destroy ]
Я понимаю, что раньше я проводил некоторое различие между пользователями / пользователями в маршрутизации и контроллерами на стороне клиента, что, глядя на, я не уверен, что это самый эффективный метод, теперь хммм, но это не было проблемой до сейчас. Если есть лучший способ сделать это различие в маршрутах (пользователь / пользователи) без отдельных контроллеров, которые я хотел бы сейчас, то это просто привередливая функция восприятия пользователя, которую я заметил.
После настройки маршрутов и еще много чего, проблема сохраняется. Я правильно отправляю на клиентский маршрут, этот клиентский маршрут идет для создания нового ресурса, а не для обновления существующего (даже если он использует параметры, которые он будет использовать для обновления).
UGH, нашел ответ вроде. Я начал использовать гем cached_resource с этим клиентом и недавно включил его для всех моделей. Выключил его для пользовательской модели, проблема исчезла. Опять решения для кэширования в будущем.