Rails 3 и SproutCore
Привет! Есть такой замечательный JavaScript фреймворк под названием SproutCore. С помощью него можно довольно легко писать веб-приложения с приближенным к десктопному интерфейсом. Штука довольно популярная, используется например Apple в iWork.com. Под катом мы прикрутим SproutCore к последним рельсам.
Само собой, сначала поставим гем с SproutCore:
К слову говоря, версия RubyGems должна быть не ниже 1.2, иначе ничего не получится. Но обновиться достаточно легко:
Ок, будем считать, что гем у нас стоит. Попробовать SproutCore в принципе можно уже сейчас:
После чего заходим на localhost:4020 и смотрим результат. Но мы займемся прикручиванием всей этой радости к рельсам.
На официальном сайте приводится пример с todo RESTful приложением, так что не будем ничего выдумывать и повторим:
Создаем проект:
Дальше нам нужно создать и чем-то наполнить БД, плюс редактирование этих данных через веб интерфейс. Scaffolding не самое лучшее решение, но для быстрого тестирования подойдет:
Применяем миграции:
Дальше нам требуется немножко поработать над реализацией стандартных CRUD операций, приведите app/controllers/tasks_controllers.rb в следующий вид:
Отлично, следующий шаг — заполнить чем-то базу данных. Вариантов много, один из наиболее удобных — заполнить db/seeds.rb:
Хотя (если значений немного), прямо в консоли вбить тоже можно:
Все почти готово для теста rails приложения, осталось удалить
Старт:
По этой ссылке вы должны наблюдать текст с содержимым вашей БД.
Осталось добавить в проект немного SproutCore, это не так сложно.
Дело в том, что SproutCore ожидает данные в формате JSON, это отличается от того, что генерирует RoR. Для исправления этого недостатка в мануале предлагается написать громоздкий класс, но в комментариях подсказали более правильное решение.
Итак, изменим наш ActiveRecord::Base в проекте, он должен выглядеть примерно так:
Соответственно, использовать можно к примеру так:
Осталось добавить строчку в файл buildfile нашего проекта:
На этом пока все. Документации и статей по SproutCore к сожалению не так уж много, но фреймворк явно заслуживает внимания.
Сайт проекта
Демо интерфейса и еще
Wiki проекта
Альбом видео по сабжу на Вимео
Само собой, сначала поставим гем с SproutCore:
sudo gem install sproutcore
К слову говоря, версия RubyGems должна быть не ниже 1.2, иначе ничего не получится. Но обновиться достаточно легко:
sudo gem update --system
Ок, будем считать, что гем у нас стоит. Попробовать SproutCore в принципе можно уже сейчас:
sc-init hello_sp
cd hello_sp
sc-server
После чего заходим на localhost:4020 и смотрим результат. Но мы займемся прикручиванием всей этой радости к рельсам.
На официальном сайте приводится пример с todo RESTful приложением, так что не будем ничего выдумывать и повторим:
Создаем проект:
$ rails new todos
$ cd todos
Дальше нам нужно создать и чем-то наполнить БД, плюс редактирование этих данных через веб интерфейс. Scaffolding не самое лучшее решение, но для быстрого тестирования подойдет:
rails g scaffold Task description:string isDone:boolean order:integer
Применяем миграции:
rake db:migrate
Дальше нам требуется немножко поработать над реализацией стандартных CRUD операций, приведите app/controllers/tasks_controllers.rb в следующий вид:
class TasksController < ApplicationController
respond_to :json
def index
respond_with(@tasks = Task.all)
end
def show
respond_with(@task = Task.find(params[:id]))
end
def create
respond_with(@task = Task.create(:description => params[:description],
:isDone => params[:isDone],
:order => params[:order]))
end
def update
@task = Task.find(params[:id])
@task.description = params[:description]
@task.isDone = params[:isDone]
@task.order = params[:order]
@task.save
respond_with(@task)
end
def destroy
@task = Task.find(params[:id])
@task.destroy
render(:nothing => true, :status => :ok)
end
end
Отлично, следующий шаг — заполнить чем-то базу данных. Вариантов много, один из наиболее удобных — заполнить db/seeds.rb:
Task.create(:description => 'This is the first task', :isDone => true, :order => 1)
Task.create(:description => 'This is the second task', :isDone => false, :order => 2)
Task.create(:description => 'This is the third task', :isDone => true, :order => 3)
Хотя (если значений немного), прямо в консоли вбить тоже можно:
rails c
и вперед. Далее заполняем нашу БД:rake db:seed
Все почти готово для теста rails приложения, осталось удалить
protect_from_forgery
из ApplicationController, иначе может возникнуть страшная ошибка «InvalidAuthenticityToken error».Старт:
rails s
По этой ссылке вы должны наблюдать текст с содержимым вашей БД.
Осталось добавить в проект немного SproutCore, это не так сложно.
Дело в том, что SproutCore ожидает данные в формате JSON, это отличается от того, что генерирует RoR. Для исправления этого недостатка в мануале предлагается написать громоздкий класс, но в комментариях подсказали более правильное решение.
Итак, изменим наш ActiveRecord::Base в проекте, он должен выглядеть примерно так:
class Task < ActiveRecord::Base
def as_json(options = {})
ret = {
:guid => "/tasks/#{self.id}",
:id => self.id,
:description => self.description,
:isDone => self.isDone
}
end
end
Соответственно, использовать можно к примеру так:
store.loadRecords(Todos.Task, response.get('body'));
Осталось добавить строчку в файл buildfile нашего проекта:
proxy "/tasks", :to => "localhost:3000"
На этом пока все. Документации и статей по SproutCore к сожалению не так уж много, но фреймворк явно заслуживает внимания.
Сайт проекта
Демо интерфейса и еще
Wiki проекта
Альбом видео по сабжу на Вимео
0 комментариев