Хорошо, наконец-то выяснили, как сделать RESTful CRUD во Flex с Ruby on Rails. Спасибо всем, кто откликнулся. Я изучал книгу Flex on Rails Тони Хиллерсона и Дэниела Ванджа. Каким-то образом я не мог заставить его работать. Удаление не работало, потому что в их примере у них было удаление, и мой метод назывался уничтожить. В любом случае, это хорошая книга, и я подумал, что поделюсь, как я нашел решение, которое работает. Оказывается, это было просто добавление соглашения об обновлении или уничтожении в тегах HTTPService.
Создание лесов для учетной записи
скрипт / сгенерировать скаффолд Имя учетной записи: строка
(Возможно, вам придется сделать db: create или db: migrate)
Контроллер учетных записей выглядит следующим образом:
класс AccountsController @accounts
конец
def create
@account = Account.new (params [: account])
if @ account.save
render: xml => @account,: status =>: созданный,: location => @account
еще
render: xml => @ account.errors,: status =>: unprocessable_entity
конец
конец
обновление по умолчанию
@account = Account.find (params [: id])
if @ account.update_attributes (params [: account])
голова: хорошо
еще
render: xml => @ account.errors,: status =>: unprocessable_entity
конец
конец
# УДАЛИТЬ / account / 1
# DELETE /accounts/1.xml
Def Destroy
@account = Account.find (params [: id])
@ account.destroy
голова: хорошо
конец
конец
Routes.rb выглядит так:
ActionController :: Routing :: Routes.draw do | map |
map.resources: account
map.connect 'account /: id',: controller => 'accounts',: action => 'update'
# Приоритет зависит от порядка создания: сначала создан -> самый высокий приоритет.
# Пример регулярного маршрута:
# map.connect 'products /: id',: controller => 'catalog',: action => 'view'
# Помните, что вы можете назначать значения, отличные от: controller и: action
# Пример названного маршрута:
# map.purchase 'products /: id / purchase',: controller => 'catalog',: action => 'purchase'
# Этот маршрут может быть вызван с помощью purchase_url (: id => product.id)
# Пример маршрута ресурса (автоматически сопоставляет глаголы HTTP с действиями контроллера):
# map.resources: products
# Пример маршрута ресурса с параметрами:
# map.resources: products,: member => {: short =>: get,: toggle =>: post},: collection => {: sold =>: get}
# Пример маршрута ресурса с подресурсами:
# map.resources: products,: has_many => [: комментарии,: продажи],: has_one =>: продавец
# Пример маршрута ресурса с более сложными подресурсами
# map.resources: продукты делают | продукты |
# products.resources: комментарии
# products.resources: sales,: collection => {: недавний =>: получить}
# end
# Пример маршрута ресурса в пространстве имен:
# map.namespace: admin do | admin |
# # Направляет / admin / products / * на Admin :: ProductsController (app / controllers / admin / products_controller.rb)
# admin.resources: продукты
# end
# Вы можете направить корень своего сайта с помощью map.root - не забудьте удалить public / index.html.
# map.root: controller => "welcome"
# Посмотрите, как все ваши маршруты расположены с помощью "граблей маршрутов"
# Установить маршруты по умолчанию как самый низкий приоритет.
# Примечание: эти маршруты по умолчанию делают все действия в каждом контроллере доступными через запросы GET. Вам следует
# рассмотрите возможность удаления или комментирования их, если вы используете именованные маршруты и ресурсы.
map.connect ': controller /: action /: id'
map.connect ': controller /: action /: id.: format'
конец
Файл mxml выглядит следующим образом:
private const CONTEXT_URL:String = "http://localhost:3000";
private function addNewAccount():void {
accounts.appendChild(<account><id></id><name>new name</name></account>);
}
]]>
</mx:Script>
<mx:HTTPService id="accountsIndex" url="{CONTEXT_URL}/accounts"
resultFormat="e4x"
result="accounts=event.result as XML" />
<mx:HTTPService id="accountsCreate" url="{CONTEXT_URL}/accounts"
method="POST" resultFormat="e4x" contentType="application/xml"
result="accountsIndex.send()" />
<mx:HTTPService id="accountsUpdate"
url="{CONTEXT_URL}/accounts/{accountsGrid.selectedItem.id}?_method=put"
method="POST" resultFormat="e4x" contentType="application/xml" />
<mx:HTTPService id="accountsDelete"
url="{CONTEXT_URL}/accounts/destroy/{accountsGrid.selectedItem.id}"
method="POST" resultFormat="e4x" contentType="application/xml"
result="accountsIndex.send()" >
<mx:request>
<_method>
destroy
</_method>
</mx:request>
</mx:HTTPService>
<mx:DataGrid id="accountsGrid"
dataProvider="{accounts.account}"
editable="true">
<mx:columns>
<mx:DataGridColumn headerText="Id" dataField="id" editable="false"/>
<mx:DataGridColumn headerText="Name" dataField="name" />
</mx:columns>
</mx:DataGrid>
<mx:Button label="New"
click="addNewAccount()"
enabled="{accountsGrid.dataProvider!=null}" />
<mx:Button label="{accountsGrid.selectedItem.id==''?'Create':'Update'}"
click="accountsGrid.selectedItem.id=='' ?
accountsCreate.send(accountsGrid.selectedItem) :
accountsUpdate.send(accountsGrid.selectedItem)" />
<mx:Button label="Delete"
click="accountsGrid.selectedItem.id=='' ?
accountsIndex.send() : accountsDelete.send()"
enabled="{accountsGrid.selectedItem!=null}" />