Существует два вида интернализации (т.е. перевода) рельсоприложений:

  1. Перевод заголовков, названий полей и всего статического, что имеется в виде. Для этих целей удобно использовать I18n, который включен в рельсы начиная с версии 2.2 (Мувик в тему!)
  2. Перевод данных из базы, для которого на данный момент нету встроенного решения может осуществляться несколькими путями.
    К примеру у нас имеется таблица страниц с названием и контентом (title, content). Вот стратегии которые предлагает нам AWDWR(3ed):

    • Иметь различные таблицы для различных языков
      | pages_en | pages_ru |
    • В таблице иметь дополнительный столбец с указанием локали, таким образом делать несколько записей каждого из продуктов с различными локалями
      | id | title        | content   | locale |
      | 1  | заголовок | контент | ru     |
      | 2  | smth       | text         | en       |
    • В таблице иметь дополнительные столбцы с каждым из полей в различных локалях
      | id | title_en | title_ru | content_en | content_ru |
    • Кстати я в итоге и воспользовался этим способом, а плагин translatable_columns помог мне в этом. Уиии!

    • То, что называется четвертой нормальной формой
      Подробнее здесь

PS
Локализацией оказывается называется интернализация времени, дат и всего чего с этим связано.

Сегодня поставил на обе машины (стационарник и макбук) RVM (ruby version manager). Данная штука позволяет держать несколько версий руби, с их гемами и рельсами, что крайне удобно.
К примеру, я поставил 2 версии руби: 1.8.7 для продакшн разработки с рельсами 2.3.5, а также 1.9.1 для изучения и проб с рельсами версии 3.0.0 beta.
В качестве напоминалки сюда публикну пару команд, что же я сделал:

1. Первоначально я поставил RVM:

  1. http://rvm.beginrescueend.com/rvm/install/ – пища для размышлений
  2. mkdir -p ~/.rvm/src/ && cd ~/.rvm/src && rm -rf ./rvm/ && git clone –depth 1 git://github.com/wayneeseguin/rvm.git && cd rvm && ./install
  3. действовать по тому, что оно пишет при инсталле
  4. открываем консоль заново

2. Поставил 2 версии руби командами:

  1. rvm install 1.9.1
  2. rvm install 1.8.7
  3. переключаться между ними можно командой rvm 1.8.7 или rvm 1.9.1
  4. поставить какую-то версию по дефолту можно командой rvm 1.9.1 –default далее »


Первая часть тут, а мы продолжаем, мвахахаха! Нам еще бы разобраться где ставить belongs_to, что выбрать has_many :through или has_and_belongs_to_many, как реализуются полиморфные ассоциации, ну и наконец, не забыть про вложенные (nested) ассоциативные связи. Поехали!

2.7 Где ставить belongs_to, а где has_one

Если ты, дорогой читатель, создаешь связь один-к-одному, то тебе понадобится добавить belongs_to в одну модель, а has_one в другую. Но как узнать в какую модель что добавлять?
Различие заключается лишь в том, где находится внешний индексный ключик (он находится в таблице класса, в котором объявляется belongs_to связь). Связь has_one говорит о том что ты имеешь нечто из множества, а не наоборот. К примеру, куда больший смысл в фразе: «у заказчика есть счет», чем «счет обладает заказчиком (как владелецем)». Посему и связь будет выглядеть вот так: далее »


Данный гайд по связям/взаимоотношениям/ассоциациям я честно спер с ресурса rubyonrails.org, приложил некоторые усилия для перевода и оформления, так что меня пинать за недобросовестность нечего! Лучше читайте кусок полезной теории, пригодится 100%.
Это руководство поведает об особенностях ассоциативных связей в Active Record. Использовав данное руководству по назначению, можешь научится следующим полезностям:

  • определение связей между моделями Active Record;
  • понимание какие типы связей необходимо использовать в вашей задаче;
  • использование доп. методов, которые дают ассоциативные связи.

В данной статье мы рассмотрим первую и частично вторую полезность, тут рассматриваем сухую теорию и не применяем ее на практике, ну разве что для простенькой иллюстрации. Кстати об иллюстрациях, под катом даже картинки есть. далее »

Мой любезный читатель, посмотри, что у меня есть для тебя! Твиттер. Данная система микроблогинга довольно известна и распространена зарубежом, но не у нас, в России.

Что интересного для заграничничников дает этот сервис? Можно обмениваться сообщениями длиной в 140 символов, а ля чятик :) Ограничение в длине сообщения связаны с тем, что твитить (т.е. посылать сообщения на твиттер) пользователь мог и может и будет мочь смс-кой. У нас операторы не предоставляют такой возможности, но тем не менее полно клиентов и плагинов для броузеров, для смартфонов и коммуников, которые восполняют дыру в на�?ем сердце от несправедливости великолепной четверки оббирателей.

Что же интересного для нас, господа, в этом сервисе? Я считаю интересным факт, что сервис написан на Ruby on Rails, что свободно предоставляет api для взаимодействия с ним, и что можно использовать его в качестве системы отслеживания новостей. �? плюс ко всему этому, можно моментально ответить автору; такого при использовании обычной rss-читалки добиться было нельзя. �?нтерактивность, блин! далее »

Mass Assignment в RoR.

Февраль 4, 2010


Mass Assignment (массовое назначение) является причиной уязвимостей сайтов на rails с момента появления фреймворка на свет. О�?ибка программиста, как зачастую это бывает, сводится к отсутствию проверки входных параметров.
Для примера создадим простенькое приложение

$ rails massVul
$ cd massVul/
$ script/generate scaffold user name:string admin:boolean

Таким образом мы создадим основу для приложения с пользователями, в которой можно указать имя в поле name, а также есть поле admin, которое легко использовать при разграничении прав пользователей. К примеру запросом, является ли этот пользователь администратором, и если да, то позволяются ему определенные действия. Конечно, мы не настолько глупы чтобы позволять обычным пользователям ставить галочку, поэтому мы правим на�? вид и удаляем все что связано с галочкой admin. далее »

Различных хау-ту�?ек на тему создания блога уже по-моему предостаточно. Поэтому я ре�?ил вам предложить написать несложный задачник используя Ruby on rails. Плюс хочу в данной теме опробовать удобства SlideShare и все иллюстрации запихнул в презента�?ку. По ходу процесса буду обращаться именно к ней обзывая слайд, который нужно взглянуть.

�?так, что же должен уметь на�? задачник? Создавать/просматривать/редактировать/удалять записи с задачами, отображать время создания задачи и время ее окончания. Вот мои версии рубей и рельс.

$ rails -v
Rails 2.3.5
$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux]

Для начала нам необходимо установить дополнительные генераторы кода от Райана Бейтса, это не обязательно, они отличаются незначительно, но в целом генераторы Райана мне нравятся боль�?е, они симпатичнее и соответствуют правилу DRY (не повторяй код дважды). Далее мы создаем приложение, переходим в папку с приложением и генерируем layout, чтобы симпатичнее смотрелось приложение в целом.

После этого необходимо создать основу на�?его приложения scaffold. Назовем его todolist, у него будет 4 поля:

  • задача (текстового типа)
  • статус (выполнено или невыполнено, поэтому булевый тип)
  • создано_в (дата-время)
  • окончено_в (дата-время)

Даль�?е подсвеченные исходнички и интересная презента�?ка, скорее жми: далее »

Дорогой мой дневничок, сегодня произо�?ла со мной печальная история, настолько печальная, что печали моей было уделено аж 30 секунд размы�?лений на тему жизни, вселенной и вообще. Как ты понимае�?ь, я получил второй эпохальный неуд на экзамене за 5 лет студенческой жизни. Конечно, сам виноват, конечно понимаю, но так бы хотелось уже не заботить свой мозг забиванием туда всякого хлама и покончить с сессией, сидеть под банановой пальмой в комнате, ку�?ать выращенную на ней кукурузу и ближай�?ие пару дней ощущать всецелое упокоение моего тела, созерцающего гигабайты аниме.

Но так уж вы�?ло! Я даже, пожалуй, согла�?усь, что просмотр аниме и есть забивка мозга всяким хламом, а ученье – свет, но иногда хочется. А знае�?ь, дорогой дневничок, студент к пятому курсу настолько обленяется, что я уже и не помню, когда сдавал экзамен не обложив�?ись книжками и конспектами в 3х вариантах. �? выходит так, что пик активности и изобретательности студента в создании новых и воссоздании забытых старых способов использования �?паргалок как раз приходится на млад�?ие курсы.

далее »

Некоторое время назад на всем известном ресурсе увидел статью про Voxelstein. Прочел и уж очень заинтересовался технологией вокселей. Тому, кто впервые с ними сталкивается, кажется, что прекрасней технологии для создания реалистичных разру�?ений в играх просто не существует! Но покопав�?ись в гугле на предмет вокселей, выяснил, что технологии не мень�?е 15 лет и либо я такой отсталый, либо технология себя не оправдала. Оказалось, все намного прозаичнее и об этом ниже.

Что же такое воксель? Википедия дает ответ следующий: volume pixel = voxel, объемный пиксель, представляет собой параллелепипед. Как и в случае с пикселом, сами по себе воксели не содержат информации о своих координатах в пространстве— она вычисляется на основе их позиции относительно других вокселов (то есть их позиции в структуре, образующей объемный объект.

воксельный скафандр

далее »

Когда Мастер Фу и его ученик Ньюби посещали святые места, по вечерам Мастер Фу имел обыкновение выступать перед неофитами Unix тех городов и сел, где они останавливались на ночлег.

Однажды среди тех, кто собрался его послу�?ать, оказался консультант по методологии.

«Если при доводке вы не профилируете регулярно ва�? код в поисках узких мест, то вы уподобляетесь рыбаку, который закидывает сеть в озеро, в котором нет рыбы», – сказал Мастер Фу.

«Не верно ли тогда и то,  – сказал консультант по методологии, – что если вы не замеряете постоянно ва�?у производительность при управлении ресурсами, то вы уподобляетесь рыбаку, который закидывает сеть в озеро, котором нет рыбы».

«Однажды я встретил рыбака, который только что уронил сеть в озеро, по которому плавает его лодка, – сказал Мастер Фу. – Он долго �?арил по дну лодки, пытаясь найти ее».

«Но если он уронил свою сеть в озеро, – сказал консультант по методологии, – то почему он искал ее в лодке?»

«Потому, что он не умел плавать», – ответил Мастер Фу.

Услы�?ав это, консультант достиг просветления.

Нам помогают

Цель любой звезды соответствовать духу времени и моде

Деятельность в области развлечений, так называемый шоу-бизнес - одна из самых прибыльных областей коммерческой деятельности. К шоу-бизнесу относятся спортсмены, певцы, актеры. Фирмы, реализующие ауд...

Хотите поразить своих родных кулинарными изысками своего приготовления?

Владеете ли вы искусством приготовления блюд? Можете из минимального количества продуктов приготовить потрясающее блюдо, попробовав которое, все окружающие будут в восторге? Если вы желаете этому на...

Как стать модной и привлекательной: несколько полезных советов

Ты заметила, что потеряла ко всему интерес? Не знаешь, куда делся твой оптимизм? Наш женский журнал даст тебе парочку полезных советов. Они тебе помогут вернуть жизнерадостность, и жизнь вновь заигр...

Заниматься тем, чем интересно и быть независимой от начальника - это великолепно!

Ты привыкла к активной жизни, разные командировки занимали почти все твое свободное время, однако неожиданно ты осталась без работы и стала домохозяйкой? Тебе непривычно и ты не знаешь, как теперь б...

Казино онлайн на интернет-ресурсах Рунета.

Иностранцы уже давно оценили онлайн казино, русским азартным игрокам еще только предстоит вступить в игорный бизнес онлайн, игровые автоматы онлайн и прочие азартные веб-порталы в интернете. Пока чт...
Дружественные сайты: