آموزش ساخت برنامه Ruby on Rails روی اوبونتو 22.04
۲۱ اسفند ۱۴۰۳
Rails یک فریمورک مبتنی بر Ruby است که میتواند توسعه وب را با استفاده از کنوانسیونهای از پیش تعیینشده سادهتر کند. این فریمورک مسیریابی، مدیریت داده و بسیاری از امکانات دیگر را بهصورت استاندارد برای کاربران خود ارائه میدهد تا توسعهدهندگان بدون درگیری با جزئیات اضافی، بتوانند به بهترین نحو کدنویسی خود را انجام دهند.
Rails بر پایه معماری MVC ساخته شده است که منطق برنامه را در مدلها نگه داشته و از بخشهای مسیریابی و نمایش جدا میکند. این ساختار، با کنوانسیونهایی که باعث کاهش تکرار کد و افزایش خوانایی و نگهداری در آن میشود همراه است.
در این آموزش از لیارا، یک برنامه Rails را خواهبد ساخت که به کاربران این امکان را میدهد تا اطلاعاتی درباره کوسهها و رفتار آنها را برای دیگران ارسال کنند.
آنچه در ادامه خواهید خواند:
- پیشنیازها
- مرحله اول: نصب SQLite3
- مرحله دوم: ایجاد یک پروژه جدید در Rails
- مرحله سوم: ساخت اسکافولد اپلیکیشن
- مرحله چهارم: ایجاد صفحه اصلی اپلیکیشن و تست عملکرد
- مرحله پنجم: ایجاد نمای روت اپلیکیشن و تست عملکرد
- مرحله ششم: اجرای مایگریشنها
- مرحله هفتم: افزودن احراز هویت
- جمع بندی
پیشنیازها
برای انجام این آموزش به موارد زیر نیاز خواهید داشت.
شما به یک کامپیوتر شخصی یا سروری با سیستمعامل اوبونتو 22.04 نیاز دارید. در این دستگاه، باید یک کاربر غیر روت (یعنی کاربری که مستقیماً ادمین اصلی نیست اما دسترسیهای مدیریتی را در اختیار دارد داشته باشید) و همچنین یک فایروال UFW را برای آن تنظیم کنید.
اگر با این موارد آشنا نیستید، میتوانید آموزش نحوه راهاندازی اولیه سرور مجازی با اوبونتو Ubuntu را مطالعه کنید.
ابتدا باید Node.js (نسخه 18.13.0) و npm (نسخه 8.19.3) را بر روی دستگاه نصب کنید.
پس از نصب Node.js , Ruby , rbenv , Rails ld میتوانید یک پایگاه داده را برای برنامه تان نصب کنید.

مرحله اول: نصب SQLite3
قبل از اینکه اپلیکیشن Rails را بسازید، به یک پایگاه داده برای ذخیرهسازی دادههای کاربران نیاز خواهید داشت. در این قسمت Rails بهصورت پیش فرض برای استفاده از SQLite تنظیم شده است و این گزینه معمولا برای توسعه بسیار مناسب میباشد. چون دادههای اپلیکیشن به قابلیت های پیچیده برنامه نویسی نیازی ندارد، SQLite برای انجام این فرآیند کافی است.
ابتدا کار در ترمینال خود دستور زیر را برای بهروزرسانی فهرست بستهها وارد کنید.
sudo apt update
بعد از آن بستههای sqlite3
و libsqlite3-dev
را نصب کنید.
sudo apt install sqlite3 libsqlite3-dev
دستور بالا SQLite و فایلهای توسعه مورد نیاز آن را نصب میکند.
برای اینکه بتوانید از نصب SQLite مطمئن شوید، حتما نسخه آن را چک کنید.
sqlite3 --version
3.37.2 2022-01-06 13:25:41 872ba256cbf61d9290b571c0e6d82a20c224ca3ad82971edc46b29818d5dalt1
مرحله دوم: ایجاد یک پروژه جدید در Rails
با نصب پایگاه داده، میتوانید پروژه جدیدی را در Rails بسازید و از کدهای پیشفرضی که Rails دارد استفاده کنید.
برای ساخت پروژه جدید با نام sharkapp
، دستور زیر را وارد در آن وارد کنید.
rails new sharkapp
در خروجی نشان میدهد که Rails برای پروژهتان چه فایلها و پوشههایی را ساخته است. تمامی این خروجیها فایلها، دایرکتوریها و دستورات مهم را نشان میدهد.
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! 15 Gemfile dependencies, 69 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
. . .
با انجام تمامی این مراحل، شما پروژه Rails جدید خود را با موفقیت ساختهاید و همهی فایلهای ضروری برای شروع کار را در اختیار خود دارید.
در مطلب زیر بهصورت مختصر برخی فایلها و پوشههای Rails که ایجاد میشوند را توضیح خواهیم داد.
- Gemfile: این فایل لیستی از پکیجهای نرمافزاری Ruby برای اپلیکیشن شما است که با استفاده از این فایل میتوانید نرمافزاری پروژهتان را مدیریت کنید.
- app: دایرکتوری app جایی است که کدهای اصلی اپلیکیشن شما در آن قرار دارد. این فسمت شامل مدلها، کنترلرها، ویوها، منابع، هِلپرها و میلرها است که ساختار اپلیکیشن شما را تشکیل میدهند و به شما در ساخت آن کمک میکند.
- config: دایرکتوری config تنظیمات پیکربندی اپلیکیشن شما را تشکیل میدهد که شامل:
- config/routes.rb: این فایل مسیرهای اپلیکیشن شما را نشان میدهد.
- config/application.rb: تنظیمات عمومی برای اجزای مختلف اپلیکیشن است و در این فایل قرار دارد.
- config/environments: تنظیمات پیکربندی برای محیطهای مختلف اپلیکیشن است که در این دایرکتوری قرار دارد.
- config/database.yml: تنظیمات پیکربندی پایگاه داده در این فایل است.
- db: این پوشه دایرکتوری با نام
migrate
, فایلهایschema.rb
,seeds.rb
را دارد.
پس از تنظیم همه چیز، وارد دایرکتوری پروژهی sharkapp
خود شوید.
cd sharkapp
🔶برای ادامه مطالعه و یادگیری: مقایسه اوبونتو و دبیان؛ راهنمای انتخاب بهترین توزیع لینوکس
برای اینکه اطمینان حاصل کنید که اپلیکیشن شما به درستی کار میکند، سرور Rails را اجرا کنید. برای این کار، کافی است که دستور زیر را وارد کنید.
rails server
Rails بهصورت پیشفرض به localhost متصل میشود و این معنا را میدهد که میتوانید با رفتن به localhost:3000
در مرورگر خود، اپلیکیشنتان را مشاهده کنید.
⚠️توجه: اگر روی یک سرور توسعه کار میکنید، قبل از اینکه برنامه خود را اجرا کنید، مطمئن شوید که اتصالها روی پورت 3000 برای شما مجاز باشند. در غیر این صورت، ممکن است نتوانید به اپلیکیشن خود دسترسی پیدا کنید.

برای اطمینان از این موضوع، میتوانید تنظیمات فایروال یا پیکربندی سرور را بررسی کنید و در صورت نیاز، پورت 3000 را باز کنید.
sudo ufw allow 3000
سپس سرور را با استفاده از --binding
و آدرس IP
سرور راهاندازی کنید.
rails server --binding=your_server_ip
حالا به آدرس http://your_server_ip:3000
در مرورگر خود بروید تا بتوانید صفحه پیشفرض Rails را مشاهده کنید.
زمانی که کارتان با آن تمام شد، میتوانید CTRL+C
در ترمینال را بزنید و سرور را متوقف کنید.
با ساخت اپلیکیشن و راهاندازی آنف میتوانید از کدهای اولیه Rails برای ساخت اپلیکیشن خود استفاده کنید.
مرحله سوم: ساخت اسکافولد اپلیکیشن
برای ساخت اپلیکیشن کوسه، به یک مدل نیاز دارید که بتواند دادهها، ویوهایی را برای خود بسازید. برای این کار از دستور rails generate scaffold
استفاده کنید.
این دستور بخشهای مختلفی از اپلیکیشن را میسازد که شامل:
- مدل (Model): برای کار با دادهها و ارتباط با پایگاه داده از آن استفاده میشود.
- مهاجرت پایگاه داده: برای ایجاد یا تغییر جداول در پایگاه داده از آن مورد استفاده قرار میگیرد.
- کنترلر (Controller): برای مدیریت درخواستهای کاربر و پردازش دادهها کاربرد دارد.
- ویوها (Views): صفحات و قالبهایی که اطلاعات را به کاربر نمایش میدهند را دارا است.
- قالب برای پارتالها، هِلپرها و تستها: فایلهای اضافی برای بهبود عملکرد و تست اپلیکیشن را دارد.
دستور generate scaffold
در Rails بسیاری از فعالیتهای مربوط به ساخت بخشهای اصلی اپلیکیشن را، به صورت خودکار انجام میدهد. این دستور شامل نام مدلها و فیلدهایی است که در جدول پایگاه داده ساخته شوند.
Rails از Active Record برای مدیریت ارتباط بین دادههای اپلیکیشن و پایگاه داده استفاده میکند.
- مدلها در Rails کلاسهایی از نوع Ruby هستند که از
ActiveRecord::Base
ارثبری میکنند. - هر مدل نشاندهنده یک جدول در پایگاه داده است.
- هر
object
، معادل یک ردیف از جدول خواهد بود.
برای ایجاد مدل، کنترلر و ویوهای مربوط به کوسه از دستور زیر استفاده کنید.
rails generate scaffold Shark name:string facts:text
در این دستور، دو گزینه name:string
و facts:text
مشخص میکنند که در جدول پایگاه داده چه فیلدهایی ساخته شوند و هرکدام چه نوع دادهای را داشته باشند.
name:string
: یک فیلد متنی کوتاه برای ذخیره نام (مثلاً نام کاربر یا محصول انتخابی شما).facts:text
: یک فیلد متنی طولانیتر که میتواند اطلاعات بیشتری را در خود نگه دارد (مثلاً توضیحات یا توضیحات محصول).
نوع داده text
برای متن های طولانی مناسبتر هستند.
بعد از اجرای این دستور، خروجی به شما نشان میدهد که چه فایلهایی برای شما ایجاد شده است.
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
. . .
این خروجی به شما نشان میدهد که چند فایل برای مدیریت مدل، کنترلر و ویوهای مربوط به مدل کوسه ایجاد شدهاند. این فایل ها به شما این امکان را میدهند که دادههای کوسه تان را از طریق CRUD حفظ کنید.
Rails مدل کوسه را در فایل app/models/shark.rb
ایجاد کرده و یک مهاجرت پایگاه داده نیز به نام db/migrate/20190804181822_create_sharks.rb
را برای آن ساخته است. به یاد داشته باشید که امکان دارد تا زمانبرچسب فایل مهاجرت شما با خروجی متفاوت باشد.
همچنین یک کنترلر به نام app/controllers/sharks_controller.rb
و ویوهای مربوط به عملیاتهای CRUD اپلیکیشن شما در پوشه app/views/sharks
ایجاد شدهاند. در بین تمامی این ویوها یک partial به نام _form.html.erb
وجود دارد که کدی را برای استفاده در تمام ویوها برای شما فراهم میکند.
Rails یک مسیر منابعی جدیدی را به نام resources :sharks
به فایل config/routes.rb
اضافه کرده است. که این امر باعث میشود که مسیریاب Rails بتواند درخواستهای HTTP
ورودی را با کنترلر sharks
و ویوهای مربوطه مطابقت دهد.
برای درک بهتر فایل کنترلر، دستور زیر را در ترمینال خود وارد کنید.
cat app/controllers/sharks_controller.rb
class SharksController < ApplicationController
before_action :set_shark, only: %i[ show edit update destroy ]
# GET /sharks or /sharks.json
def index
@sharks = Shark.all
end
# GET /sharks/1 or /sharks/1.json
def show
end
# GET /sharks/new
def new
@shark = Shark.new
end
# GET /sharks/1/edit
def edit
end
# POST /sharks or /sharks.json
def create
@shark = Shark.new(shark_params)
respond_to do |format|
if @shark.save
format.html { redirect_to shark_url(@shark), notice: "Shark was successfully created." }
format.json { render :show, status: :created, location: @shark }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @shark.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /sharks/1 or /sharks/1.json
def update
respond_to do |format|
if @shark.update(shark_params)
format.html { redirect_to shark_url(@shark), notice: "Shark was successfully updated." }
format.json { render :show, status: :ok, location: @shark }
else
format.html { render :edit, status: :unprocessable_entity }
format.json { render json: @shark.errors, status: :unprocessable_entity }
end
end
end
# DELETE /sharks/1 or /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
# Use callbacks to share common setup or constraints between actions.
def set_shark
@shark = Shark.find(params[:id])
end
# Only allow a list of trusted parameters through.
def shark_params
params.require(:shark).permit(:name, :facts)
end
end
📍نکته:
در SharksController
، متدهای مختلفی برای انجام عملیاتهای CRUD که شامل (ایجاد، خواندن، ویرایش و حذف) هستند تعریف شده است. تمامی این متدها مسئول دریافت اطلاعات از مدلها و ارسال آن به ویوها را دارند. علاوه بر این، متدهای اضافی برای مدیریت خطاها و بهبود کارایی اپلیکیشن نیز در کنترلر تعریف شدهاند.
در متد create
کنترلر کوسه، اگر یک نمونه جدیدی از کلاس Shark
با موفقیت ذخیره شود، متد redirect_to
درخواست جدیدی را برای شما ایجاد میکند که تمامی آنها را به متد show
هدایت میکند.
این درخواست از نوع GET
است و متد show
دادههایی که به تازگی وارد شدهاند را به کاربر نشان میدهد.
اگر ذخیرهسازی شما ناموفق باشد، Rails به جای ارسال درخواست جدید به سرور، دوباره قالب app/views/sharks/new.html.erb
را رندر میکند و به کاربر این فرصت را میدهد که اطلاعات خود را دوباره در این قسمت وارد کند.
دستور زیر برای مشاهده قالب ویو Index میباشد که به متد Index در کنترلر شما متصل است.
cat app/views/sharks/index.html.erb
<p style="color: green"><%= notice %></p>
<h1>Sharks</h1>
<div id="sharks">
<% @sharks.each do |shark| %>
<%= render shark %>
<p>
<%= link_to "Show this shark", shark %>
</p>
<% end %>
</div>
<%= link_to "New shark", new_shark_path %>
در این ویو، حلقهای وجود دارد که از روی تمام نمونههای Shark در پایگاه داده عبور میکند و آنها را بررسی میکند. این کار با استفاده از ERB templating
انجام میشود که برای هر نمونه از کوسه، نام و حقایق آن را به کاربر خود نمایش میدهد. سپس از متد link_to
برای ایجاد لینکهایی استفاده میشود که کاربر را به صفحه جزئیات هر کوسه هدایت میکند. این صفحه، به متد show
در کنترلر آن متصل است.
این لینکها به کاربران اجازه میدهد تا بتوانند اطلاعات دقیقتر هر کوسه را به راحتی مشاهده کنند.
این دستور برای مشاهده قالب ویو new
است که میتواند فرم جدیدی را برای اضافه کردن کوسه به دیتابیس ایجاد کند.
cat app/views/sharks/new.html.erb
<h1>New shark</h1>
<%= render "form", shark: @shark %>
<br>
<div>
<%= link_to "Back to sharks", sharks_path %>
</div>
اگرچه این قالب فیلدهای ورودی برای اضافه کردن کوسه جدید ندارد، اما با استفاده از دستور render "form"
مشخص میشود که این قالب، پارشال _form.html.erb را بارگذاری میکند. این پارشال حاوی کدهایی است که در ویوهای مختلف از آن استفاده میشود و به این معناست که از تکرار کد جلوگیری میشود و فرمها سادهتر و مدیریت آنها راحتتر میگردد.
نکته:
- قالب
new.html.erb
فرم ساخت کوسه جدید را از پارشال_form.html.erb
بارگذاری میکند. - متد
create
در کنترلر برای ذخیره اطلاعات جدید استفاده میشود و در صورت موفقیت، کاربر را به صفحهshow
هدایت میکند. - قالب
index.html.erb
لیستی از تمام کوسهها را برای شما به نمایش میگذارد.
برای ایجاد یک نمونه جدید از کوسه، میتوانید فایل _form.html.erb
را بررسی کنید.
دستور زیر فایل پارشال فرم را بررسی میکند.
cat app/views/sharks/_form.html.erb
<%= form_with(model: shark) do |form| %>
<% if shark.errors.any? %>
<div style="color: red">
<h2><%= pluralize(shark.errors.count, "error") %> prohibited this shark from being saved:</h2>
<ul>
<% shark.errors.each do |error| %>
<li><%= error.full_message %></li>
<% end %>
</ul>
</div>
<% end %>
<div>
<%= form.label :name, style: "display: block" %>
<%= form.text_field :name %>
</div>
<div>
<%= form.label :facts, style: "display: block" %>
<%= form.text_area :facts %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>
این قالب از form_with
که برای ساخت فرمهای ورودی طراحی شده است استفاده میکند. در این قسمت form_with(model: shark)
یک شیء فرم جدیدی را ایجاد میکند که فیلدهای آن به ستونهای جدول کوسه در پایگاه داده متصل است. به این ترتیب، کاربران میتوانند اطلاعات مربوط به نام و اطلاعاتی راجب کوسه را وارد کرده و در پایگاه داده ذخیره کنند.
اگر در هنگام ارسال فرم خطاهایی وجود داشته باشد، در بالای فرم به رنگ قرمز نمایش داده خواهند شد.
هنگامی که این فرم ارسال میشود، یک پاسخ JSON با دادههای وارد شده به وجود میآید که بقیه بخشهای برنامه میتوانند از طریق متد params
به آن دسترسی پیدا کنند.
مرحله چهارم: ایجاد صفحه اصلی اپلیکیشن و تست عملکرد
برای اینکه صفحه فرود (landing page) اپلیکیشن شما بهصورت مستقیم به هدف اپلیکیشن اشاره کند، میتوانید صفحه اصلی اپلیکیشن را به روت اپلیکیشن اختصاص دهید. این کار به کاربران این امکان را میدهد که از همان ابتدا با هدف و محتوای اپلیکیشن آشنا شوند و تجربه بهتری در استفاده از آن داشته باشند.
برای مثال، میتوانید یک کنترلر به نام Welcome را بسازید و یک ویو به نام index را برای آن اضافه کنید.این ویو به کاربران صفحه فرود عمومی نمایش میدهد که میتواند به بخشهای مختلف اپلیکیشن لینک دهد و آنها را به قسمتهای مختلف هدایت کند تا تجربه کاربری بهتری ایجاد شود.
برای انجام این عمل، باید مسیرهای اپلیکیشن را در فایل config/routes.rb
تغییر دهید تا روت اپلیکیشن را مشخص کنید.
تغییر فایل routes.rb
ابتدا فایل config/routes.rb
را برای ویرایش باز کنید:
nano config/routes.rb
سپس، در فایل config/routes.rb
این کد را مشاهده خواهید کرد.
Rails.application.routes.draw do
resources :sharks
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
# Defines the root path route ("/")
# root "articles#index"
end
تغییر روت اپلیکیشن به صفحه index
برای اینکه صفحه روت اپلیکیشن به ویو index کنترلر sharks منتقل شود، باید خط #root "articles#index"
را از حالت کامنت خارج کرده و کلمه articles
را با sharks
جایگزین کنید.
Rails.application.routes.draw do
resources :sharks
root 'sharks#index'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
پس از ویرایش فایلها، آن را ذخیره کرده و از ویرایشگر خارج شوید. اگر از nano استفاده میکنید، برای خروج، ابتدا CTRL+X
سپس Y
و در نهایت ENTER
را فشار دهید.
دستورات مهم
زمانی که کاربران به روت اپلیکیشن شما وارد شدند، به جای صفحه خوشآمد گویی رایلی، باید به صفحه فرود کوسهها هدایت شوند. در این صفحه کاربران میتوانند اطلاعات جدیدی از کوسهها را وارد کرده و اطلاعاتی که در آن وجود دارد را مشاهده، ویرایش یا حذف کنند.
برای اعمال تغییرات در پایگاه داده، دستور زیر را اجرا کنید.
rails db:migrate
در صورتی که این دستورات به درستی اجرا شوند، خروجی زیر را برای شما نمایش خواهد داد.
== 20230124215633 CreateSharks: migrating =====================================
-- create_table(:sharks)
-> 0.0041s
== 20230124215633 CreateSharks: migrated (0.0045s) ============================
👈🏻بیشتر بخوانید: راهنمای عیبیابی مشکلات رایج سایت در سرور مجازی لینوکس
مرحله پنجم: ایجاد نمای روت اپلیکیشن و تست عملکرد
صفحه ابتدایی اپلیکیشن شما باید به روت اپلیکیشن متصل باشد تا کاربران بلافاصله با ورود به اپلیکیشن، هدف و محتوای آن را درک کنند.
برای مثال، میتوانید یک کنترلر Welcome و نمای index مرتبطی بسازید که یک صفحه ابتدایی عمومی برای کاربران فراهم کند و همچنین لینکهایی به بخشهای مختلف اپلیکیشن را ایجاد کند.
برای انجام این کار، باید تنظیمات روتینگ را در فایل config/routes.rb
تغییر دهید تا روت اپلیکیشن مشخص شود.
برای ویرایش فایل config/routes.rb
، از ویرایشگر مورد نظر خود (مثل nano) استفاده کنید.
nano config/routes.rb
سپس در فایل routes.rb
، روتهای خود را مانند زیر دستی تنظیم کنید.
Rails.application.routes.draw do
resources :sharks
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
# Defines the root path route ("/")
# root "articles#index"
end
اگر روت خاصی را تنظیم نکرده باشید، وقتی آدرس http://localhost:3000
یا http://your_server_ip:3000
را وارد میکنید، بهصورت پیش فرض صفحه خوش آمدگویی Rails نمایش داده میشود.
برای اینکه صفحه روت اپلیکیشن به نمای index
کنترلر sharks
متصل شود، باید خط پیشفرض root "articles#index"
را باز کرده و articles
را به sharks
تغییر دهید.
Rails.application.routes.draw do
resources :sharks
root 'sharks#index'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
پس از ذخیره تغییرات، از ویرایشگر خارج شوید. اگر از ویرایشگر nano
استفاده کردید، برای خروج CTRL+X
، سپس Y
و بعد ENTER
را فشار دهید.
وقتی کاربران به روت اپلیکیشن شما میروند. بهجای صفحه پیشفرض خوشآمدگویی Rails، مستقیما به صفحه اصلی Sharks هدایت میشوند. در این صفحه، کاربران میتوانند کوسههای جدیدی را اضافه کنند و لیست کوسههای موجود را مشاهده، ویرایش یا حذف کنند.
مرحله ششم: اجرای مایگریشنها
برای اینکه تغییرات در پایگاه داده اعمال شود، دستور زیر را وارد کنید.
rails db:migrate
خروجی زیر تأیید میکند که مایگریشن شما انجام شده است یا خیر.
== 20230124215633 CreateSharks: migrating =====================================
-- create_table(:sharks)
-> 0.0041s
== 20230124215633 CreateSharks: migrated (0.0045s) ============================
در این قسمت باید سرور Rails خود را دوباره راهاندازی کنید. اگر روی سیستم خودکار میکنید، دستور زیر را وارد کنید.
rails s
در صورتی که بر روی سرور توسعهدهنده کار میکنید، از دستور زیر استفاده کنید.
rails s --binding=your_server_ip
نکته:
- اگر بر روی سیستم خود هستید، به آدرس localhost:3000 بروید.
- اگر بر روی سرور توسعهدهنده کار میکنید، آدرس http://your_server_ip:3000 را وارد کنید.
- حالا میتوانید صفحه ابتدایی جدید اپلیکیشن خود را مشاهده کنید.

برای ایجاد یک کوسه جدید، روی لینک New Shark کلیک کنید. این لینک شما را به مسیر sharks/new هدایت میکند.

برای تست اپلیکیشن، میتوانید اطلاعاتی را وارد کنید. در فیلد Name عبارت Great White
را وارد کنید و در فیلد Facts عبارت Scary
را بنویسید.


بعد از وارد کردن اطلاعات، روی دکمه Create Shark کلیک کنید تا کوسه جدید برای شما ساخته شود.
این دکمه شما را به روت show هدایت میکند، که با استفاده از فیلتر before_action
، متد set_shark
اجرا میشود. این متد id
کوسهای که ایجاد کردهاید را دریافت میکند.
# ~/sharkapp/app/controllers/sharks_controller.rb
class SharksController < ApplicationController
before_action :set_shark, only: %i[ show edit update destroy ]
. . .
# GET /sharks/1 or /sharks/1.json
def show
end
. . .
private
# Use callbacks to share common setup or constraints between actions.
def set_shark
@shark = Shark.find(params[:id])
end
. . .
در این کد، متد set_shark
از before_action
استفاده میکند تا قبل از هر عملی مانند show , edit , update یا destroy id کوسه را پیدا کرده و در متغیر @shark
ذخیره کند. این کار باعث میشود که در صفحه show اطلاعات مربوط به کوسه که ساختهاید، بهصورت کامل نمایش داده شود.
برای تست ویرایش، روی گزینه Edit this shark
در ورودی خود کلیک کنید. این کار شما را به روت edit
برای همان کوسه میبرد.

حالا که عملکردهای پایهای برنامهتان را تست کردهاید میتوانید اعتبار سنجیها و چکهای امنیتی را به برنامه خود اضافه کنید تا همه چیز برای شما راحتتر شود.
برنامهی شما میتواند ورودیهای کاربران را بپذیرد، اما امکان دارد که کاربری بخواهد بدون اینکه فیلد توضیحات (Facts) را پر کند یک کوسه جدید بسازد یا برای کوسهای که قبلاً در پایگاه داده وجود داشته است، ورودی جدیدی را وارد کند. برای جلوگیری از این اشتباهات، میتوانید قوانین اعتبارسنجی را به برنامه اضافه کنید تا قبل از ذخیرهسازی دادهها در پایگاه داده انجام شود، بتواند بررسیهای لازم را انجام دهد.
برای این کار، به مدل کوسهی خود بروید و اعتبارسنجیها را اضافه کنید.
ابتدا فایل مدل shark.rb
را باز کنید.
bashCopyEditnano app/models/shark.rb
کلاس Shark از ApplicationRecord ارث میبرد و کلاس ApplicationRecord هم از ActiveRecord::Base ارث بری میکند. این یعنی کلاس Shark میتواند از امکانات مربوط به پایگاه داده استفاده کند.
rubyCopyEditclass Shark < ApplicationRecord
end
برای اینکه مطمئن شوید فیلد name پر شده است و ورودیهای شما تکراری نیستند، میتوانید اعتبار سنجیهای را اضافه کنید.
rubyCopyEditclass Shark < ApplicationRecord
validates :name, presence: true, uniqueness: true
end
سپس یک اعتبارسنجی برای فیلد facts
اضافه کنید تا مطمئن شوید این فیلد هم مانند بقیه فیلدها پر شده است.
rubyCopyEditclass Shark < ApplicationRecord
validates :name, presence: true, uniqueness: true
validates :facts, presence: true
end
در این قسمت، خط validates :facts , presence: true
فقط بررسی میکند که فیلد facts
پر هست یا خیر، اما به یاد داشته باشید که تکراری بودن اطلاعات در این فیلد بررسی نمیشود.
پس از اعمال تغییرات، فایل را ذخیره کرده و آن را ببندید.
حال سرور را دوباره راهاندازی کنید و با دستور rails s
یا rails s --binding=your_server_ip
، به روت برنامه خود بروید.
برای ساخت کوسه جدید، بر روی لینک New Shark
کلیک کنید. بعد از آن فرم را باز کنید، در فیلد Name
عبارت Great White
، در فیلد Facts
عبارت Big Teeth
را وارد کنید. در انتها بر روی دکمه Create Shark
کلیک کنید. اگر همهچیز درست باشد، پیام موفقیت آمیز بودن ساخت کوسه جدید برای شما نمایش دادهمیشود.
برای بررسی اعتبار سنجیهای بیشتر، باید بر روی لینک Backti sharks کلیک کنید تا بتوانید به صفحه اصلی برگردید. بعد از آن دوباره بر روی New Shark کلیک کنید. در فرم جدید، و در فیلد Name عبارت Tiger Shark را وارد کنید و فیلد Facts را همان طور خالی بگذارید. حالا وقتی بر روی دکمه Create Shark کلیک میکنید پیامی بر اجباری بودن این فیلد به شما نمایش داده میشود.
مرحله هفتم: افزودن احراز هویت
با اعمال اعتبارسنجیها، دیگر مطمئن هستید که دادههایی در دیتابیس ذخیره میشوند معتبر هستند. اگر نمیخواهید هر کسی به دیتابیس دسترسی داشته باشد، باید تدابیری را برای احراز هویت کاربران خود بسیازید، تا فقط کاربران مجاز بتوانند کوسهها را به آن اضافه کنند. برای این کار از متد http_basic_authenticate_with
استفاده میکنیم که به کاربران اجازه ایجاد نام کاربری و کلمه عبور را میدهد.
روشهای مختلفی برای احراز هویت در Rails وجود دارد، که میتوان به استفاده از جواهرات bcrypt
یا devise
از آن نام برد. برای شروع این کار، باید در کنترلر اصلی اپلیکیشن خود روشی اضافه کنید که در تمام اکشنهای اپلیکیشن اعمال شود. این کار به خصوص زمانی کاربرد دارد که کنترلرهای جدیدی به اپلیکیشن اضافه کنید.
برای این کار ابتدا سرور را با فشردن CTRL+C
متوقف کنید.
فایل کنترلر اپلیکیشن را باز کنید.
nano app/controllers/application_controller.rb
در این فایل کلاس 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 را مشاهده کنند. یعنی که میتوانند اطلاعات مربوط به کوسه ها را ببینند و آن را مطالعه کنند. اما برای ویرایش محتوا، به احراز هویت نیاز خواهند داشت.
بعد از ویرایش، فایل را ذخیره کرده و ببندید.
حالا سرور را با دستور rails s
یا rails s --binding=your_server_ip
راهاندازی کنید و به اپلیکیشن خود در آدرس http://localhost:3000
یا http://your_server_ip:3000
بروید.
در صفحه اصلی روی دکمه New Shark
کلیک کنید. این کار پنجره احراز هویت زیر را نمایش خواهد داد.
اگر نام کاربری sammy
و کلمه عبور shark
را وارد کنید، که همان ترکیب مورد نظر شما در فایل app/controllers/application_controller.rb
است، میتوانید یک کوسه جدید ایجاد کنید.
حالا شما یک اپلیکیشن کوسه کاربردی دارید که شامل اعتبارسنجی دادهها و یک سیستم احراز هویت ساده است.
جمع بندی
Rails یک فریمورک ساده و قدرتمند است که برای ساخت اپلیکیشنهای وب از آن استفاده میشود. این فریمورک به شما کمک میکند تا به راحتی برنامه خود را بسازید. در این آموزش، آموختید که چگونه یک اپلیکیشنی بسازید که به کاربران خود امکان نوشتن اطلاعات را بدهد و بتوانند آنها را به اشتراک بگذارند. تمامی این مراحل به شما کمک میکند تا به سرعت یک اپلیکیشن کاربردی بسازید و تجربهای ساده و سریع از توسعه وب داشته باشید.