Разработка на RoR

2.01K
.
У меня на завтра запланированы ассоциации, я пока не дошёл до них
.
No-Tactic, ага их.
просто смотри, я вижу, что ты в моделе перечислил аттрибуты name, email, text без указания типа, но в файле миграции они имеют тип string, а также еще добавилось 2 поля даты. Откуда при миграции мы узнаем, что name это string? или если мы явно не указали тип данных, то оно по дефолту делает string?
изза этой магии мне и не понравился RoR
.
flaky (25.07.2013 / 20:02)
просто смотри, я вижу, что ты в моделе перечислил аттрибуты name, email, text без указания типа, но в файле миграции они имеют тип string, а также еще добавилось 2 поля даты. Откуда при миграции мы уз
Ну дак мы же сами написали в миграции, что name это string
Мы пишем в миграции нужные нам поля с указанием их типа, потом выполняем не и создаётся таблица в бд.
А модель нужна только для доступа к данным в этой таблице
.
No-Tactic, ясн. просто я привык в джанге/алхимии что сразу в моделе описываеться тип данных, поэтому мне это в диковену. да и как то не удобно
.
flaky, очень удобно)
.
No-Tactic
Плюшки из Rails

1) создание приложения: пишем в консоли
rails new appname

и нам генерирует основную структуру файлов.
2) создание контроллера: в консоли
rails g controller contoroller_name

создается сам контроллер, хелпер для стандартных CRUD адресов, и юнит тесты(читаем о TDD, если не знаем, что это) контроллер генерируется пустой
3) создание модели: в консоли
rails g model model_name

создается модель, миграция и тесты. Модель и миграция пустые

4) есть такая фишка с названием скаффолдинг (правда я ни разу не пользовался, так что сам сказать не могу читаем http://rubyclub.blogspot.ru/20 ... .html )
в общем, эта фича сама генерирует бульшую часть кода приложения

5) по умолчанию есть чпу роуты. Для стандартного CRUD приложения достаточно строки
resources :posts

чтобы создать адреса:
/posts - экшен: posts#index. все посты, тип запроса GET
/posts/id - экшен: posts#show. отдельный пост, тип запроса GET
/posts/id/edit - экшен: posts#edit. изменение поста, тип запроса GET
/posts/new - экшен: posts#new. создание поста, тип запроса GET
/posts - экшен: posts#create. сюда отправляется запрос из экшена new, тип запроса POST
/posts/id - экшен: posts#update. сюда отправляется запрос из экшена edit, тип запроса PUT
/posts/id - экшен: posts#destroy. Удаление поста. тип запроса DELETE


6) можно использовать PostgreSQL, MySQL, SQLlite изменяя только гем для используемой бд (одна строчка)
.
flaky, тип связи has one/belongs to (one-to-one)
допустим, у нас есть магазин.
В бд две таблицы Users, Carts. логично предположить, что у одного юзера одна корзина
В миграции для Users никаких дополнительных полей не нужно
В миграции для Carts добавляем поле типа Integer с названием user_id
в модели user, в контексте класса пишем
has_one :cart


в модели cart, так же в контексте класса
belongs_to :user


все, и теперь у нас есть свойство cart для юзера, которому можно присвоить обьект класса корзина
.
продолжаем с магазином
связь has many/belongs to (many-to-one)
у нас есть пользователи. Каждый пользователь может создать много заказов
в миграции для Users оставляем все так же, в миграцию orders пишем поле user_id
в модели user пишем
has_many  :orders # именно orders т.к заказов много

и в модели order
belongs_to :user


теперь можно присвоить много заказов пользователю
.
No-Tactic
Вопрос к администрации: можно ли будет тут ссылку разместить на свеженький проект на рельсах?
.
пока пилил бложек (без уроков всяких и прочей ереси) было все легко и непринужденно, залил на сервак и начались неожиданности:
оказывается, в production окружении, все js и css файлы минимизируются и кэшируются в папочку public, и умные рельсы берут их оттуда. я долго парился с настррйкой, чтоб это все было автоматом при изменении в файлах. не получилось, минимизируем командой в консольке.
в продакшен окружении после каждого изменения в коде приходится перезапускать nginx и passenger
Всего: 145