Таким образом, вы чувствуете, что вы исходите из прошлого, не будучи CRUD
(Create, Read, Update, Delete
) осведомленным ... основываясь на том, что вы не перечислили контроллеры и т. Д., Над которыми вы работаете, чтобы добиться этого (крайне важно для любого ответа наответьте на свой вопрос).
Основываясь на статусе вопроса 2/22 @ 06:18 am -600 вот несколько быстрых заметок ...
Вы захотите пройти эту прогулку-по началу работы - RailsGuides .
Во-вторых, я думаю, что из вашего URL, который вы перечислили - у вас есть вложенный маршрут и вы используете соответствующую вложенную модель.Ответ изменяет, какой контроллер / действие / маршрутизацию я предлагаю - поэтому обязательно уточните, если вы не понимаете, прежде чем пытаться понять этот ответ ...
Все это - работа предположения, поскольку тамэто детали вашей реализации, которые нам не хватает (файл route.rb, если это скрипт, который вы, как администратор, вызываете, или каждый пользователь запускает обновление самостоятельно, если это вообще работает).
Когда закончите, вопрос, который вы хотели задать, должен быть ...
«Какой контроллер и действие контроллера я должен использовать для обновления регистрационной информации?»(Обычно обозначается как controller#action
)
Ответ CRUD
- это update
(rails называет его Edit
для отображения представления и update
для выполнения).
Причина, по которой ваш вопрос сбивает людей с толку, заключается в том, что в Rails Way (CRUD
) уже есть базовый код для контроллера и действие для этого действия контроллера по обновлению поля.Вам не нужно создавать объект самостоятельно - все объекты данных, которые являются постоянными, должны быть объектами модели Rails.
В вашем случае модель Vehicle
в app/models/vehicle.rb
была бы моей догадкой.Вы можете выбрать для этого маршрут в файле config/routes.rb
как ...
Rails.application.routes.draw do
resources :users do
resources :vehicle
...
, что даст вам маршрут / URL-адрес "/{:user_id}/{:vehicle_id}/{controller action}"
.
Это предполагает...
- Пользователь, заходящий на ваше приложение в сети или сети
- Они регистрируются или в
- Отображают информацию из API (я неконечно, если вы хотите передать эту информацию обратно в этот API, и именно поэтому вам нужен объект - но при условии, что это не так)
- После того, как пользователь # show controller вытягивает модель транспортного средства, извлекает информацию из API
- Ваш контроллер перенаправит их на действие CRUD
read
(Rails называет это Show
).Это также уже закодировано в действии контроллера для обновления.
В вашем случае это, вероятно, будет ... User#show
, что будет accepts_nested_attributes_for :RegistrationYear
и, возможно, :Description
в User
модель, ссылаясь на поля в Vehicle
модели, с которой вы уже работаете.
Для другого случая ... вы просто оборачиваете другой API, который обновляется, и ваше rails-приложение не 'не удерживать что-либо ...
Вам нужна пользовательская сущность или аутентификация ... возможно, вы получаете omni_auth или другой токен для входа в систему безопасности из API, на который вы ссылались ... так что ваши шаги ...
- Либо войдите в систему, либо вы создадите / войдите в систему пользователя
- Ваш
User#Show
должен иметь ссылку на Vehicle#Update
, либо представление User#Show
должно включать эту форму с полем сидентификаторы пользователя и транспортного средства ... которые заполняются уже после того, как контроллер выполнил этот запрос API, извлекают всю информацию и имеют два обновляемых поля. - Кнопка отправки должна быть в обычном режиме.rails app будет ссылкой на другое действие контроллера #, которое будет просто выполнять интерфейс обновления API вместо того, чтобы сохранять информацию в вашу собственную базу данных ... хотя вы могли бы легко поместить этот вызов интерфейса API в
controller#action
, отвечающий за отображение формы.
Я предлагаю вам сделать стандартный объектный файл, если вы просто оборачиваете API своим собственным приложением rails ...
# depending on where you put this you might need to load it yourself
app/lib/other_api_connection.rb
# rails prefers this format as part of ruby & it's class autoloading
class OtherAPI < CarRegistrationFrance
attr_accessor :registration, :description
def initialize(search_immat, user, pass, api_url = {whatever currently})
...
@user = user
@pass = pass
@record = look_up
@api_url = api_url
end
def look_up(search_immat)
...
Lookup("#{search_immat}", @user, @pass)
end
def update_api
begin
... {you haven't shown us the update API url} ...
rescue {some error from api}
return "{some error message}"
end
end
end
Итак ... у вас есть обработчик APIобъект сейчас ...
Для использования вы вызываете его в контроллере # action ... скажем User # Show, который отправляет перенаправления на User#Update
или Vehicle#Update
class Vehicle < ActionController::Base
...
def update
...
# normal stuff probably needs to be deleted if you aren't saving to your application db THEN updating API (aka just wrapping an API - which I'm assuming you are doing since you haven't said otherwise & it's less work).
# also you could pass the object as a parameter in the submit link - but that's not really CRUD per say
@user = {whatever user is}
api = OtherAPI.new(user, pass)
# you might have to permit this as parameter to pull it out
@response_code = api.update_api(:RegistrationYear, :Description) # or whole vehicle record if the API requires
if @response_code == {whatever valid code is from that API documentation}
format.html { redirect_to @vehicle, notice: 'Vehicle was successfully updated.' }
else
format.html { render :edit }
format.json { render json: @vehicle.errors, status: :unprocessable_entity }
end
... rest of controller actions
end
Примечание. Я предложил создать класс / объект интерфейса API, потому что вы можете затем вызывать код из контроллера или из действия и вносить изменения только в одном месте, если изменился URL-адрес API и т. Д ..., но ...вам может потребоваться include OtherAPI
вверху каждого кода контроллера.