הקדמה
ריילס הוא מסגרת יישום אינטרנט שנכתבה ב-רובי. הוא מקבל גישה מקובלת לפיתוח יישומים, תוך הנחה שהשיטות המקובלות משרתות בצורה הטובה ביותר את המפתחים כאשר יש מטרה משותפת. לכן, ריילס מציע שיטות מקובלות לטיפול בניתוב, נתונים מצביים, ניהול נכסים ועוד כדי לספק את הפונקציונליות הבסיסית שרוב היישומים האינטרנטיים צריכים.
ריילס עוקב אחרי התבנית הארכיטקטונית של מודל-תצוגה-בקרה (MCV), המבדילה בין הלוגיקה של היישום, הממוקמת במודלים, לבין הניתוב והצגת המידע של היישום. מבנה הארגון הזה – יחד עם שיטות מקובלות אחרות שמאפשרות למפתחים לחלץ קוד ל-עזרים ו-חלקים חלקיים – מוודא שקוד היישום אינו חוזר על עצמו באופן מיותר.
במדריך זה, תבנה יישום Rails שיאפשר למשתמשים לפרסם מידע על כרישים והתנהגותם. זו נקודת התחלה טובה לפיתוח יישומים עתידיים.
דרישות מוקדמות
כדי לעקוב אחר מדריך זה, תזדקק:
- מכונה מקומית או שרת פיתוח הפועל על Ubuntu 18.04. מכונת הפיתוח שלך צריכה להכיל משתמש לא-שורתי עם הרשאות מנהל ודלפק מוגדר עם
ufw
. להוראות כיצד להגדיר זאת, עיין במדריך הגדרת שרת התחלתית עם Ubuntu 18.04 שלנו. - Node.js ו-npm מותקנים על המכונה המקומית שלך או שרת הפיתוח. מדריך זה משתמש בגרסת Node.js 10.16.3 ו-npm גרסה 6.9.0. להדרכה בהתקנת Node.js ו-npm על Ubuntu 18.04, בצע את ההוראות בסעיף "התקנה באמצעות PPA" של כיצד להתקין Node.js על Ubuntu 18.04.
- Ruby, rbenv, ו-Rails מותקנים על המחשב המקומי שלך או על שרת הפיתוח, על פי שלבים 1-4 ב-כיצד להתקין Ruby on Rails עם rbenv ב-Ubuntu 18.04. מדריך זה משתמש ב-Ruby 2.5.1, rbenv 1.1.2, ו-Rails 5.2.0.
שלב 1 — התקנת SQLite3
לפני שניצור את יישום Rails שלנו, עלינו לוודא שיש לנו מסד נתונים לאחסון נתונים של משתמשים. Rails מוגדרת לשימוש ב-SQLite כברירת מחדל, וזה לרוב בחירה טובה בפיתוח. מאחר שנתוני היישום שלנו לא דורשים ניתוח תכנותי מתקדם, SQLite יספק את צרכינו.
ראשית, עדכן את רשימת החבילות שלך:
לאחר מכן, התקן את החבילות sqlite3
ו-libsqlite3-dev
:
sudo apt install sqlite3 libsqlite3-dev
זה יתקין גם את SQLite וגם את הקבצים הדרושים לפיתוח שלו.
בדוק את הגרסה כדי לאשר שההתקנה הצליחה:
Output3.22.0 2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2alt1
עם ההתקנת SQLite, אתה מוכן להתחיל לפתח את היישום שלך.
שלב 2 — יצירת פרויקט ראילס חדש
עם המסד נתונים שלנו מותקן, אנו יכולים ליצור פרויקט ראילס חדש ולהתבונן בקוד התבנית המוגדר כברירת מחדל שראילס מספק לנו עם הפקודה rails new
.
צור פרויקט בשם sharkapp
עם הפקודה הבאה:
תראה הרבה פלט שמספר לך מה ראילס יוצר עבור הפרויקט החדש שלך. הפלט למטה מדגיש כמה קבצים, ספריות ופקודות משמעותיות:
Output create
. . .
create Gemfile
. . .
create app
. . .
create app/controllers/application_controller.rb
. . .
create app/models/application_record.rb
. . .
create app/views/layouts/application.html.erb
. . .
create config
create config/routes.rb
create config/application.rb
. . .
create config/environments
create config/environments/development.rb
create config/environments/production.rb
create config/environments/test.rb
. . .
create config/database.yml
create db
create db/seeds.rb
. . .
run bundle install
. . .
Bundle complete! 18 Gemfile dependencies, 78 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
. . .
* bin/rake: Spring inserted
* bin/rails: Spring inserted
הפלט המודגש כאן אומר לך שראילס יצר את הדברים הבאים:
Gemfile
: קובץ זה מפרט את התלות בג'מי ליישום שלך. ג'מה היא חבילת תוכנה ברובי, ו-Gemfile מאפשר לך לנהל את צרכי התוכנה של הפרויקט שלך.app
: הספרייהapp
היא המקום בו קוד היישום העיקרי שלך חי. זה כולל את המודלים, הבקרים, התצוגות, הנכסים, העוזרים והדואר המהווים את היישום עצמו. ראילס נותן לך קוד תבנית ברמת היישום להתחיל במודל MCV בקבצים כמוapp/models/application_record.rb
,app/controllers/application_controller.rb
, ו-app/views/layouts/application.html.erb
.config
: מדריך זה מכיל את הגדרות התצורה של היישום שלך:config/routes.rb
: הכרזות הנתיבים של היישום שלך נמצאות בקובץ זה.config/application.rb
: הגדרות כלליות עבור רכיבי היישום שלך מוצאות בקובץ זה.
config/environments
: מדריך זה הוא המקום שבו הגדרות התצורה עבור הסביבות שלך נמצאות. ריילס כוללת שלוש סביבות כברירת מחדל:development
,production
, ו-test
.config/database.yml
: הגדרות התצורה של מסד הנתונים נמצאות בקובץ זה, שמחולק לארבע סעיפים:default
,development
,production
, ו-test
. הודות לקובץ Gemfile שהגיע עם הפקודהrails new
, שכללה את הג'םsqlite3
, קובץconfig/database.yml
שלנו כבר מוגדר עם הפרמטרadapter
שלו ל-sqlite3
, מה שמציין שנשתמש במסד נתונים SQLite עם היישום הזה.db
: תיקייה זו כוללת ספריית עבור עדכוני מסד נתונים הנקראתmigrate
, יחד עם קבציschema.rb
ו-seeds.rb
.schema.db
מכיל מידע על מסד הנתונים שלך, בעוד ש-seeds.rb
הוא המקום שבו תוכל להכניס נתוני זרעים למסד הנתונים.
לבסוף, Rails מריץ את הפקודה bundle install
כדי להתקין את התלות המופיעות ב-Gemfile
שלך.
לאחר שהכל מוכן, נווט לתיקיית sharkapp
:
עכשיו אתה יכול להפעיל את שרת Rails כדי לוודא שהיישום שלך פועל, באמצעות הפקודה rails server
. אם אתה עובד על המחשב המקומי שלך, הקלד:
Rails מקשר ל-localhost
כברירת מחדל, כך שתוכל כעת לגשת ליישום שלך על ידי ניווט לדפדפן שלך ל-locahost:3000
, שם תראה את התמונה הבאה:
אם אתה עובד על שרת פיתוח, תחילה ודא שהחיבורים מורשים בפורט 3000
:
לאחר מכן הפעל את השרת עם הדגל --binding
, כדי לקשר ל-IP של השרת שלך:
נווט ל-http://your_server_ip:3000
בדפדפן שלך, שם תראה את הודעת הברוכים של Rails.
לאחר שתבדוק סביב, תוכל לעצור את השרת עם CTRL+C
.
עם היישום שלך שנוצר ובמקום, אתה מוכן להתחיל לבנות מתבנית ה-Rails ליצירת יישום ייחודי.
שלב 3 — יצירת מבנה היישום
כדי ליצור את יישום מידע הכריזית שלנו, נצטרך ליצור מודל לניהול נתוני היישום שלנו, תצוגות לאפשר אינטראקציה משתמש עם הנתונים האלה, ובקר לניהול התקשורת בין המודל לתצוגות. כדי לבנות את הדברים האלה נשתמש בפקודה rails generate scaffold
, שתיתן לנו מודל, העברת מסד נתונים לשינוי סכמת המסד הנתונים, בקר, ערכת מלאה של תצוגות לניהול יצירה, קריאה, עדכון ומחיקה (CRUD) עבור היישום, ותבניות לחלקים, עוזרים ובדיקות.
בגלל שהפקודה generate scaffold
עושה כל כך הרבה עבודה עבורנו, נבחן בקפידה את המשאבים שהיא יוצרת כדי להבין את העבודה ש-Rails עושה מתחת למכסה המנוע.
הפקודה generate scaffold
שלנו תכלול את שם המודל שלנו ואת השדות שאנו רוצים בטבלת המסד נתונים שלנו. ריילס משתמשת ב-Active Record כדי לנהל מערכות יחסים בין נתוני היישום, שמורכבים כאובייקטים עם מודלים, לבין מסד הנתונים של היישום. כל אחד מהמודלים שלנו הוא מחלקת Ruby, וכן גם יורשת מהמחלקה ActiveRecord::Base
. זה אומר שאנחנו יכולים לעבוד עם מחלקת המודל שלנו באותו אופן שבו היינו עובדים עם מחלקת Ruby, תוך כדי שאנו משיגים גם שיטות מ-Active Record. Active Record יבטיח שכל מחלקה תמפה לטבלה במסד הנתונים שלנו, וכל מופע של מחלקה זו לשורה בטבלה זו.
הקלד את הפקודה הבאה כדי ליצור מודל Shark
, בקר ותצוגות משויכות:
עם name:string
ו-facts:text
אנו מספקים לריילס מידע על השדות שאנו רוצים בטבלת המסד נתונים שלנו ועל סוג הנתונים שהם צריכים לקבל. שניהם יספקו לנו מקום להזין מה שאנו רוצים, אם כי text
יאפשר יותר תווים לעובדות על כרישים.
כאשר תקליד את הפקודה הזו, תראה שוב רשימה ארוכה של פלט שמסביר כל מה שריילס יוצר עבורך. הפלט למטה מדגיש כמה מהדברים המשמעותיים יותר עבור ההגדרה שלנו:
Output invoke active_record
create db/migrate/20190804181822_create_sharks.rb
create app/models/shark.rb
. . .
invoke resource_route
route resources :sharks
invoke scaffold_controller
create app/controllers/sharks_controller.rb
invoke erb
create app/views/sharks
create app/views/sharks/index.html.erb
create app/views/sharks/edit.html.erb
create app/views/sharks/show.html.erb
create app/views/sharks/new.html.erb
create app/views/sharks/_form.html.erb
. . .
ריילס יצרה את המודל ב-app/models/shark.rb
וגרסת מסד נתונים שתלויה בו: db/migrate/20190804181822_create_sharks.rb
. הזמן המדויק בקובץ הגרסה שלך יהיה שונה ממה שאתה רואה כאן.
היא גם יצרה מגבר, app/controllers/sharks_controller.rb
, כמו גם את התצוגות המשויכות לפעולות ה-CRUD של יישום האפליקציה שלנו, שנאספו תחת app/views/sharks
. בין התצוגות אלה נמצאת חלקית, _form.html.erb
, המכילה קוד המשמש במסגרת תצוגות שונות.
לבסוף, ריילס הוסיפה נתיב משאב חדש, resources :sharks
, ל-config/routes.rb
. זה מאפשר לראוטר של ריילס להתאים בקשות HTTP נכנסות למגבר sharks
ולתצוגות המשויכות לו.
למרות שריילס עשתה הרבה מאוד מהעבודה של בניית קוד האפליקציה שלנו בשבילנו, כדאי להתבונן בכמה קבצים כדי להבין מה קורה.
ראשית, בואו נביט בקובץ המגבר עם הפקודה הבאה:
Outputclass SharksController < ApplicationController
before_action :set_shark, only: [:show, :edit, :update, :destroy]
# GET /sharks
# GET /sharks.json
def index
@sharks = Shark.all
end
# GET /sharks/1
# GET /sharks/1.json
def show
end
# GET /sharks/new
def new
@shark = Shark.new
end
# GET /sharks/1/edit
def edit
end
# POST /sharks
# POST /sharks.json
def create
@shark = Shark.new(shark_params)
respond_to do |format|
if @shark.save
format.html { redirect_to @shark, notice: 'Shark was successfully created.' }
format.json { render :show, status: :created, location: @shark }
else
format.html { render :new }
format.json { render json: @shark.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /sharks/1
# PATCH/PUT /sharks/1.json
def update
respond_to do |format|
if @shark.update(shark_params)
format.html { redirect_to @shark, notice: 'Shark was successfully updated.' }
format.json { render :show, status: :ok, location: @shark }
else
format.html { render :edit }
format.json { render json: @shark.errors, status: :unprocessable_entity }
end
end
end
# DELETE /sharks/1
# DELETE /sharks/1.json
def destroy
@shark.destroy
respond_to do |format|
format.html { redirect_to sharks_url, notice: 'Shark was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# השתמש בקולבקים לשיתוף הגדרות או הגבלות נפוצות בין פעולות.
def set_shark
@shark = Shark.find(params[:id])
end
# אף פעם אל תסמכו על פרמטרים מהאינטרנט המפחיד, אפשר רק את הרשימה הלבנה.
def shark_params
params.require(:shark).permit(:name, :facts)
end
end
הבקר אחראי לניהול איך המידע נלקח ומועבר למודל המשויך שלו, ואיך הוא משויך לתצוגות מסוימות. כפי שאתה יכול לראות, הבקר sharks
שלנו כולל סדרה של מתודות שממפות בערך לפעולות CRUD סטנדרטיות. עם זאת, יש יותר מתודות מפונקציות CRUD, כדי לאפשר יעילות במקרה של שגיאות.
לדוגמה, שקול את המתודה create
:
. . .
def create
@shark = Shark.new(shark_params)
respond_to do |format|
if @shark.save
format.html { redirect_to @shark, notice: 'Shark was successfully created.' }
format.json { render :show, status: :created, location: @shark }
else
format.html { render :new }
format.json { render json: @shark.errors, status: :unprocessable_entity }
end
end
end
. . .
אם מופע חדש של מחלקת Shark
נשמר בהצלחה, redirect_to
ייצור בקשה חדשה שאז תופנה לבקר. זו תהיה בקשת GET
, והיא תטופל על ידי המתודה show
, שתראה למשתמש את הכריש שהם פשוט הוסיפו.
אם יש כישלון, אז ריילס יעביר את התבנית app/views/sharks/new.html.erb
שוב במקום לבצע בקשה נוספת לראוטר, וזה ייתן למשתמשים עוד סיכוי לשלוח את הנתונים שלהם.
בנוסף לבקר הכרישים, Rails סיפק לנו תבנית לתצוגת index
, שמתייחסת לשיטת index
בבקר שלנו. נשתמש בזה כתצוגת השורש עבור היישום שלנו, ולכן כדאי להתבונן בה.
הקלד את הדברים הבאים כדי להדפיס את הקובץ:
Output<p id="notice"><%= notice %></p>
<h1>Sharks</h1>
<table>
<thead>
<tr>
<th>Name</th>
<th>Facts</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @sharks.each do |shark| %>
<tr>
<td><%= shark.name %></td>
<td><%= shark.facts %></td>
<td><%= link_to 'Show', shark %></td>
<td><%= link_to 'Edit', edit_shark_path(shark) %></td>
<td><%= link_to 'Destroy', shark, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Shark', new_shark_path %>
תצוגת index
עוברת על מופעים של מחלקת Shark
שלנו, שהושוו לטבלת sharks
במסד הנתונים שלנו. באמצעות ERB templating, התצוגה מוציאה כל שדה מהטבלה שמשויך למופע בודד של כריש: name
ו-facts
.
התצוגה משתמשת אז בסייעת link_to
כדי ליצור קישור עם המחרוזת הנתונה כטקסט לקישור והנתיב הנתון כיעד. הנתיבים עצמם נעשים אפשריים בזכות helpers שהפכו לזמינים לנו כשהגדרנו את הנתיב המשאבי sharks
עם הפקודה rails generate scaffold
.
בנוסף לבדיקת תצוגת index
שלנו, נוכל גם להתבונן בתצוגת new
כדי לראות איך Rails משתמשת בחלקיות בתצוגות. הקלד את הדברים הבאים כדי להדפיס את תבנית app/views/sharks/new.html.erb
:
Output<h1>New Shark</h1>
<%= render 'form', shark: @shark %>
<%= link_to 'Back', sharks_path %>
למרות שהתבנית הזו עשויה להיראות כאילו אין בה שדות קלט לכניסה חדשה של כריש, התייחסות ל-render 'form'
מגלה לנו שהתבנית משתמשת בחלק המקומי _form.html.erb
, שמוציא קוד שחוזר על עצמו במספר חלונות.
הסתכלות על הקובץ הזה תיתן לנו הבנה מלאה על איך מופק מופע חדש של כריש:
Output<%= form_with(model: shark, local: true) do |form| %>
<% if shark.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(shark.errors.count, "error") %> prohibited this shark from being saved:</h2>
<ul>
<% shark.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= form.label :name %>
<%= form.text_field :name %>
</div>
<div class="field">
<%= form.label :facts %>
<%= form.text_area :facts %>
</div>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
התבנית הזו משתמשת בסייעת הטופס form_with
ליצירת טופס. סייעות הטופסים מיועדות להקל על יצירת אובייקטים חדשים מקלט המשתמש באמצעות השדות והיקף של מודלים מסוימים. כאן, form_with
מקבל כארגומנט model: shark
, ואובייקט בונה הטופס החדש שהוא יוצר כולל שדות קלט המתאימים לשדות בטבלת sharks
. לכן למשתמשים יש שדות טופס להזנת שם
ועובדות
על כריש.
הגשת הטופס הזה תיצור תגובת JSON עם נתוני המשתמש ששאר היישום יכול לגשת אליהם באמצעות שיטת הפרמטרים, שיוצרת אובייקט ActionController::Parameters
עם הנתונים הללו.
עכשיו כשאתה יודע מה rails generate scaffold
יצר בשבילך, אתה יכול לעבור להגדרת התצוגה הראשית עבור היישום שלך.
שלב 4 – יצירת תצוגת השורש של היישום ובדיקת פונקציונליות
באופן אידיאלי, ברצונך שדף הנחיתה של היישום ימפורט לשורש היישום, כך שהמשתמשים יוכלו לקבל מיד תחושה של מטרת היישום.
ישנן מספר דרכים שבהן תוכל להתמודד עם זה: למשל, תוכל ליצור בקר Welcome
ותצוגה משויכת index
, שתספק למשתמשים דף נחיתה כללי שיכול גם לקשר לחלקים שונים ביישום. במקרה שלנו, למרות זאת, נחיתת המשתמשים על תצוגת הכרישים שלנו index
תהיה מבוא מספק למטרת היישום כרגע.
כדי להגדיר זאת, תצטרך לשנות את הגדרות הניתוב בקובץ config/routes.rb
כדי לציין את שורש היישום.
פתח את config/routes.rb
לעריכה, באמצעות nano
או העורך המועדף עליך:
הקובץ יראה כך:
Rails.application.routes.draw do
resources :sharks
# לפרטים על DSL הזמין בתוך קובץ זה, ראה http://guides.rubyonrails.org/routing.html
end
בלי להגדיר משהו ספציפי יותר, התצוגה הדיפולטיבית בכתובת http://localhost:3000
או http://your_server_ip:3000
תהיה דף הברוכים הדיפולטיבי של Rails.
כדי למפות את תצוגת השורש של היישום לתצוגת index
של בקר הכרישים, תצטרך להוסיף את השורה הבאה לקובץ:
Rails.application.routes.draw do
resources :sharks
root 'sharks#index'
# לפרטים על ה-DSL הזמין בתוך הקובץ הזה, ראה http://guides.rubyonrails.org/routing.html
end
עכשיו, כשמשתמשים מגיעים לשורש של היישום שלך, הם יראו רשימה מלאה של כרישים, ויהיה להם הזדמנות ליצור ערך כריש חדש, להסתכל על ערכים קיימים, ולערוך או למחוק ערכים נתונים.
שמור את הקובץ וצא מהעורך שלך כשתסיים לערוך. אם השתמשת ב-nano
לעריכת הקובץ, תוכל לעשות זאת על ידי הקשה על CTRL+X
, Y
, ואז ENTER
עכשיו תוכל להריץ את המיגרציות שלך עם הפקודה הבאה:
תראה פלט המאשר את המיגרציה.
הפעל שוב את שרת Rails שלך. אם אתה עובד מקומית, הקלד:
בשרת פיתוח, הקלד:
נווט ל-localhost:3000
אם אתה עובד מקומית, או ל-http://your_server_ip:3000
אם אתה עובד בשרת פיתוח.
דף הנחיתה של היישום שלך יראה ככה:
כדי ליצור כריש חדש, לחץ על הקישור New Shark בתחתית הדף, שיקח אותך לנתיב sharks/new
:
בואו נוסיף מידע הדגמה כדי לבדוק את היישום שלנו. הזן "כריש לבן גדול" לתוך שדה Name ו-"מפחיד" לתוך שדה Facts:
לחץ על כפתור Create כדי ליצור את הכריש.
פעולה זו תכוון אותך לנתיב show
, אשר, בזכות מסנן before_action
, מוגדר עם שיטת set_shark
, אשר מחזיק את ה-id
של הכריש שיצרנו זה עתה:
class SharksController < ApplicationController
before_action :set_shark, only: [:show, :edit, :update, :destroy]
. . .
def show
end
. . .
private
# השתמש בקולבקים לשיתוף הגדרות נפוצות או מגבלות בין פעולות.
def set_shark
@shark = Shark.find(params[:id])
end
. . .
אתה יכול לבדוק את הפונקציות של עריכה עכשיו על ידי לחיצה על Edit על ערכ הכריש שלך. זה יוביל אותך לנתיב edit
עבור אותו כריש:
שנה את facts
על הגדול הלבן לקרוא "גדול" במקום "מפחיד" ולחץ על Update Shark. זה יחזיר אותך לנתיב show
:
לבסוף, לחיצה על Back תוביל אותך לתצוגת index
המעודכנת שלך:
עכשיו שבדקת את הפונקציונליות הבסיסית של היישום שלך, אתה יכול להוסיף כמה אימותים ובדיקות אבטחה כדי להפוך הכל לבטוח יותר.
שלב 5 — הוספת אימותים
יישום הכרישים שלך יכול לקבל קלט ממשתמשים, אך דמיין מצב שבו משתמש מנסה ליצור כריש ללא הוספת עובדות לכריש, או יוצר ערך עבור כריש שכבר נמצא במסד הנתונים. אתה יכול ליצור מנגנונים לבדוק נתונים לפני שהוא נכנס למסד הנתונים על ידי הוספת אימותים לדגמים שלך. מכיוון שהלוגיקה של היישום שלך ממוקמת בדגמים שלו, אימות קלט נתונים כאן הוא הגיוני יותר מאשר במקומות אחרים ביישום.
שים לב שלא נכסה כתיבת בדיקות אימות במדריך זה, אך תוכל ללמוד עוד על בדיקות על ידי ייעוץ במסמכי Rails.
אם עדיין לא עצרת את השרת, עשה זאת על ידי הקלדת CTRL+C
.
פתח את קובץ המודל shark.rb
שלך:
כרגע, הקובץ אומר לנו שהמחלקה Shark
יורשת מ-ApplicationRecord
, שבתורו יורשת מ-ActiveRecord::Base
:
class Shark < ApplicationRecord
end
בואו נוסיף תחילה כמה אימות לשדה name
שלנו כדי לוודא שהשדה מלא ושהערך הוא ייחודי, וכך נמנע כניסות כפולות:
class Shark < ApplicationRecord
validates :name, presence: true, uniqueness: true
end
לאחר מכן, הוסף אימות לשדה facts
כדי לוודא שגם הוא מלא:
class Shark < ApplicationRecord
validates :name, presence: true, uniqueness: true
validates :facts, presence: true
end
אנו פחות מודאגים כאן מהיות העובדות ייחודיות, כל עוד הן משוייכות לכניסות דגים ייחודיות.
שמור וסגור את הקובץ כשתסיים.
הפעל את השרת שוב עם rails s
או rails s --binding=your_server_ip
, בהתאם לכך אם אתה עובד מקומית או עם שרת פיתוח.
נווט לשורש היישום שלך בכתובת http://localhost:3000
או http://your_server_ip:3000
.
לחץ על שחיין חדש. בטופס, הוסף "כריש גדול" לשדה שם ו-"שיניים גדולות" לשדה עובדות, ולאחר מכן לחץ על צור שחיין. אתה אמור לראות את האזהרה הבאה:
עכשיו, בואו נראה אם אנו יכולים לבדוק את האימות האחרים שלנו. לחץ חזרה כדי לחזור לדף הבית, ואז שחיין חדש שוב. בטופס החדש, הזן "כריש נמר" בשדה שם, והשאר עובדות ריק. לחיצה על צור שחיין תפעיל את האזהרה הבאה:
עם שינויים אלה, היישום שלך כולל כמה אימות כדי להבטיח עקביות בנתונים שנשמרים במסד הנתונים. עכשיו אתה יכול להקדיש את תשומת לבך למשתמשים של היישום שלך ולהגדיר מי יכול לשנות נתונים ביישום.
שלב 6 — הוספת אימות
עם האימות במקום, יש לנו כמה מובטחים לגבי הנתונים שנשמרים במסד הנתונים. אבל מה עם משתמשים? אם אנחנו לא רוצים שכל משתמש יוסיף למסד הנתונים, אז עלינו להוסיף כמה מידות אימות כדי להבטיח שרק משתמשים מורשים יכולים להוסיף שחיינים. כדי לעשות זאת, נשתמש בשיטה http_basic_authenticate_with
, שתאפשר לנו ליצור שילוב של שם משתמש וסיסמה כדי לאמת משתמשים.
ישנן מספר דרכים לאמת משתמשים עם Rails, כולל עבודה עם הbcrypt
או devise
gems. לעת עתה, עם זאת, נוסיף שיטה ל-application controller שלנו שתחול על פעולות ברחבי היישום שלנו. זה יהיה שימושי אם נוסיף עוד מספר פקודות ליישום בעתיד.
עצור את השרת שלך שוב עם CTRL+C
.
פתח את הקובץ שמגדיר את ApplicationController
שלך:
בתוכו, תראה את ההגדרה עבור מחלקת ApplicationController
, שממנה יורשות הפקודות האחרות ביישום שלך:
class ApplicationController < ActionController::Base
end
כדי לאמת משתמשים, נשתמש בשם משתמש וסיסמה קשיחים עם השיטה http_basic_authenticate_with
. הוסף את הקוד הבא לקובץ:
class ApplicationController < ActionController::Base
http_basic_authenticate_with name: 'sammy', password: 'shark', except: [:index, :show]
end
בנוסף לספק את שם המשתמש והסיסמה כאן, גם הגבלנו את האימות על ידי ציון הנתיבים שבהם אין לדרוש אימות: index
ו-show
. דרך נוספת להשיג זאת היתה לכתוב only: [:create, :update, :destroy]
. בדרך זו, כל המשתמשים יוכלו להסתכל על כל הכרישים ולקרוא עובדות על כרישים מסוימים. כשזה מגיע לשינוי תוכן האתר, עם זאת, המשתמשים יצטרכו להוכיח שיש להם גישה.
בהגדרה יותר חזקה, לא תרצה לקודד ערכים בצורה זו, אך לשם הדגמה, זה יאפשר לך לראות כיצד ניתן לכלול אימות עבור מסלולי היישום שלך. זה גם מאפשר לך לראות כיצד Rails מאחסן נתוני פעילות כברירת מחדל בעוגיות: ברגע שאתה מאמת בפעולה מסוימת, לא תידרש לאמת שוב באותה פעילות.
שמור וסגור app/controllers/application_controller.rb
כשתסיים לערוך. כעת תוכל לבדוק את האימות בפעולה.
הפעל את השרת עם rails s
או rails s --binding=your_server_ip
ונווט אל היישום שלך ב-http://localhost:3000
או http://your_server_ip:3000
.
בדף הנחיתה, לחץ על כפתור New Shark. זה יפעיל את חלון האימות הבא:
אם תכניס את שילוב שם המשתמש והסיסמה שהוספת ל-app/controllers/application_controller.rb
, תוכל ליצור כלים חדשים בצורה מאובטחת.
כעת יש לך יישום כלים פועל, עם אימות נתונים ותבנית אימות בסיסית.
מסקנה
האפליקציית Rails שיצרת במדריך זה היא נקודת מוצא שתוכל להשתמש בה לפיתוח נוסף. אם אתה מעוניין לחקור את מערכת ה-Rails, תיעוד הפרויקט הוא מקום מצוין להתחיל.
תוכל גם ללמוד עוד על הוספת משאבים מקוננים לפרויקט שלך על ידי קריאת כיצד ליצור משאבים מקוננים עבור יישום Ruby on Rails, שיראה לך כיצד לבנות את מודלים ומסלולים של היישום שלך.
כמו כן, ייתכן שתרצה לחקור כיצד להגדיר פרונטנד חזק יותר עבור הפרויקט שלך עם מסגרת כמו React. כיצד להגדיר פרויקט Ruby on Rails עם פרונטנד של React מציע הדרכה בנושא זה.
אם תרצה לחקור אפשרויות מסדי נתונים שונות, תוכל גם לבדוק את כיצד להשתמש ב־PostgreSQL עם היישום שלך ברובי על ריילס באובונטו 18.04, שעובר על איך לעבוד עם PostgreSQL במקום SQLite. תוכל גם לעיין באוסף המדריכים שלנו על PostgreSQL כדי ללמוד עוד על עבודה עם מסד הנתונים הזה.
Source:
https://www.digitalocean.com/community/tutorials/how-to-build-a-ruby-on-rails-application