Rails це просто ruby, статті про програмування mkdev

Бажаючи навчитися створювати круті сайти і веб-додатки та обравши в якості інструменту для цього Ruby on Rails, початківці програмісти нерідко виявляються настільки зачаровані відомої "магією" фреймворка, що навіть не замислюються про те, що лежить в її основі. Наочним прикладом подібного чарівності є випадки, коли новачок очікує, що атрибут контролера буде доступний в файлі моделі, не розуміючи, як ці компоненти взаємодіють між собою.







Фреймворк Ruby on Rails написаний на динамічному об'єктно-орієнтованої мови Ruby. Кожен рядок коду, кожен елемент чарівництва, який сприймається новачком як щось само собою зрозуміле, є результатом виконання раніше написаного розробниками фреймворка коду на Ruby.

Перш ніж продовжувати читання, переконайтеся, що ви маєте хоча б базове уявлення про те, як працює Ruby: що таке методи, що таке аргументи методів, що таке об'єкти і класи. Якщо ви не впевнені в тому, що розумієте значення перерахованих термінів, рекомендую прочитати книгу Кріса Пайна "Вчися програмувати" (вона дуже коротка і зовсім не нудна), а так само ознайомитися з наступними матеріалами:

Звичайно, не варто залишати без уваги і інтерактивні навчальні сервіси: щоб спробувати власними руками написати код на Ruby і побачити, що вийде, скористайтеся Try Ruby і Codecademy.

Після того, як ви освоїлися з синтаксисом Ruby і оцінили по достоїнству його можливості, пропоную розглянути простий приклад, наочно описує ситуацію, яка описана на початку статті.

У контролері у нас є змінна екземпляра @translated_text. містить відправлений з форми текст. Програміст-передбачає, що магія Rails дозволить йому використовувати цю змінну в моделі, але це не так. Насправді, щоб наведений як приклад код моделі працював, необхідно переписати його наступним чином:

Чому ж в моделі не можна використовувати змінні екземпляра, які приймають свої значення в контролері і мають символ @ на початку? Відповідь проста: тому що змінні екземпляра контролера не транслюються в модель. У контролері задаються змінні, які будуть використані під вьюха цього контролера, до моделі вони не мають ніякого відношення. Що потрібно робити, щоб не допускати подібних помилок? Чи не покладатися на "магію" фреймворка і ретельно вивчати документацію. В першу чергу необхідно зрозуміти, що Ruby on Rails - це не більше, ніж код, написаний на Ruby, і веде він себе відповідно до того, що описано в його вихідному коді. А вихідний код Rails написаний таким чином, що якщо в екшені show контролера HomeController задати змінну @home. то вона буде доступна для використання в файлі app / views / show.html.erb.







Розглянемо ще один приклад, простіше.

Припустимо, у нас є модель Post:

Код з прикладу виглядає дуже простим і зрозумілим, написаним практично людською мовою. Однак, це всього лише рядок коду на Ruby, а саме - метод has_many. який приймає кілька аргументів, в нашому прикладі він всього один, ім'я моделі у множині у вигляді символу.

Приклад використання Скоуп і додаткових параметрів (опцій)

У наведеному прикладі ми бачимо Скоуп -> . і параметр class: 'User' які вказують, що використовуватися будуть екземпляри моделі User. що мають значення false в атрибуті banned.

Якщо поглянути в вихідний код методу has_many. ми побачимо, що це звичайнісінький код на Ruby, який написаний таким чином, щоб втілювати необхідний нам функціонал:

Таким же чином влаштований весь Ruby on Rails і все геми, написані спільнотою.

В отриманій відповіді можна відшукати кілька рядків:

Нескладно зрозуміти, що команда дозволяє побачити, які геми використовує в якості опори для реалізації власного функціоналу кожен гем, встановлений в системі. Блок тексту трохи вище показує, що Rails грунтується на 9 гемах, кожен з яких можна використовувати окремо від фреймворка. Кожен з цих гемов, в свою чергу, може використовувати інші в своїй основі, але всі вони написані на звичайному Ruby. Якщо в достатній мірі вивчити цю мову, читання вихідного коду практично будь-якого гема, фреймворка або скрипта не складе великих труднощів. А краще розуміння можливостей чужого коду приходить саме в процесі читання і розуміння цього самого коду.

Ще по темі

  • Rails це просто ruby, статті про програмування mkdev
    Пару слів про інтерактори в Rails
  • Rails це просто ruby, статті про програмування mkdev
    Як робити full-text пошук в Rails за допомогою PostgreSQL
  • Rails це просто ruby, статті про програмування mkdev
    Кілька патернів для написання надійного ruby ​​коду

Нарешті вирішив зайнятися самоосвітою?

Тоді почни з нашого безкоштовного путівника по світу веб-розробки. Усередині купа корисних порад і матеріалів для самостійного вивчення.

дістати книгу

Rails це просто ruby, статті про програмування mkdev







Схожі статті