Thứ tư, 21/08/2019 | 00:00 GMT+7

Cách tạo ứng dụng Ruby on Rails

Rails là một khung ứng dụng web được viết bằng Ruby . Nó có một cách tiếp cận kiên định để phát triển ứng dụng, giả định các quy ước đặt ra phục vụ tốt nhất cho các nhà phát triển có mục tiêu chung. Do đó, Rails cung cấp các quy ước để xử lý định tuyến, dữ liệu trạng thái, quản lý tài sản, v.v. để cung cấp chức năng cơ bản mà hầu hết các ứng dụng web cần.

Rails tuân theo mô hình kiến trúc model-view-controller (MCV), phân tách logic của ứng dụng, nằm trong các mô hình, khỏi định tuyến và trình bày thông tin ứng dụng. Cấu trúc này tổ chức - cùng với các công ước khác cho phép các nhà phát triển để extract mã vào những người giúp đỡpartials - đảm bảo mã ứng dụng không được lặp đi lặp lại không cần thiết .

Trong hướng dẫn này, bạn sẽ xây dựng một ứng dụng Rails cho phép user đăng thông tin về cá mập và hành vi của chúng. Nó sẽ là một điểm khởi đầu tốt cho việc phát triển ứng dụng sau này.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

  • Máy local hoặc server phát triển chạy Ubuntu 18.04. Máy phát triển của bạn phải có user không phải root có quyền quản trị và firewall được cấu hình với ufw . Để biết hướng dẫn về cách cài đặt điều này, hãy xem hướng dẫn Cài đặt server ban đầu với Ubuntu 18.04 của ta .
  • Node.jsnpm được cài đặt trên máy local hoặc server phát triển của bạn. Hướng dẫn này sử dụng Node.js version 10.16.3npm version 6.9.0 . Để biết hướng dẫn về cách cài đặt Node.js và npm trên Ubuntu 18.04, hãy làm theo hướng dẫn trong phần “Cài đặt bằng PPA” của Cách cài đặt Node.js trên Ubuntu 18.04 .
  • Ruby, rbenv và Rails được cài đặt trên máy local hoặc server phát triển của bạn, hãy làm theo các Bước 1-4 trong Cách cài đặt Ruby on Rails với rbenv trên Ubuntu 18.04 . Hướng dẫn này sử dụng Ruby 2.5.1 , rbenv 1.1.2 và Rails 5.2.0 .

Bước 1 - Cài đặt SQLite3

Trước khi tạo ứng dụng Rails shark, ta cần đảm bảo ta có database để lưu trữ dữ liệu user . Rails được cấu hình để sử dụng SQLite theo mặc định và đây thường là một lựa chọn tốt trong quá trình phát triển. Vì dữ liệu ứng dụng của ta không yêu cầu khả năng mở rộng theo chương trình cấp cao, nên SQLite sẽ đáp ứng nhu cầu của ta .

Đầu tiên, hãy cập nhật index gói của bạn:

  • sudo apt update

Tiếp theo, cài đặt gói sqlite3libsqlite3-dev :

  • sudo apt install sqlite3 libsqlite3-dev

Thao tác này sẽ cài đặt cả SQLite và các file phát triển bắt buộc của nó.

Kiểm tra version của bạn để xác nhận cài đặt thành công:

  • sqlite3 --version
Output
3.22.0 2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2alt1

Với SQLite được cài đặt, bạn đã sẵn sàng để bắt đầu phát triển ứng dụng của bạn .

Bước 2 - Tạo một dự án rail mới

Với database của ta đã được cài đặt, ta có thể tạo một dự án Rails mới và xem xét một số mã soạn sẵn mặc định mà Rails cung cấp cho ta bằng lệnh rails new .

Tạo một dự án có tên là sharkapp bằng lệnh sau:

  • rails new sharkapp

Bạn sẽ thấy rất nhiều kết quả cho bạn biết Rails đang tạo ra những gì cho dự án mới của bạn. Kết quả bên dưới nêu bật một số file , folder và lệnh quan trọng:

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

Kết quả được đánh dấu ở đây cho bạn biết rằng Rails đã tạo như sau:

  • Gemfile : Tệp này liệt kê các phụ thuộc gem cho ứng dụng của bạn. Gem là một gói phần mềm Ruby và Gemfile cho phép bạn quản lý các nhu cầu phần mềm của dự án.
  • app : Thư mục app là nơi chứa mã ứng dụng chính của bạn. Điều này bao gồm các mô hình, bộ điều khiển, chế độ xem, nội dung, trình trợ giúp và trình gửi thư tạo nên chính ứng dụng. Rails cung cấp cho bạn một số bản soạn sẵn cấp ứng dụng cho mô hình MCV để bắt đầu trong các file như app/models/application_record.rb , app/controllers/application_controller.rbapp/views/layouts/application.html.erb .
  • config : Thư mục này chứa cài đặt cấu hình ứng dụng của bạn:
    • config/routes.rb : Khai báo lộ trình của ứng dụng của bạn nằm trong file này.
    • config/application.rb : Cài đặt chung cho các thành phần ứng dụng của bạn nằm trong file này.
  • config/environments : Thư mục này là nơi đặt các cài đặt cấu hình cho môi trường của bạn. Rails bao gồm ba môi trường theo mặc định: development , productiontest .
  • config/database.yml : Cài đặt cấu hình database nằm trong file này, được chia thành bốn phần: default , development , productiontest . Nhờ có Gemfile đi kèm với lệnh rails new , bao gồm gem sqlite3 , file config/database.yml của ta đã đặt tham số adapter thành sqlite3 , chỉ định rằng ta sẽ sử dụng database SQLite với ứng dụng này.
  • db : Thư mục này bao gồm một folder để di chuyển database được gọi là migrate , cùng với các schema.rbseeds.rb schema.db chứa thông tin về database của bạn, trong khi seeds.rb là nơi bạn có thể đặt dữ liệu hạt giống cho database .

Cuối cùng, Rails chạy lệnh bundle install để cài đặt các phụ thuộc được liệt kê trong Gemfile của bạn.

Khi mọi thứ đã được cài đặt , hãy chuyển đến folder sharkapp :

  • cd sharkapp

Đến đây bạn có thể khởi động server Rails đảm bảo rằng ứng dụng của bạn đang hoạt động bằng cách sử dụng lệnh rails server . Nếu bạn đang làm việc trên máy local của bạn , hãy nhập:

  • rails server

Rails liên kết với localhost theo mặc định, vì vậy bây giờ bạn có thể truy cập ứng dụng của bạn bằng cách chuyển trình duyệt của bạn đến locahost:3000 , nơi bạn sẽ thấy hình ảnh sau:

Trang đích Rails

Nếu bạn đang làm việc trên server phát triển, trước tiên hãy đảm bảo các kết nối được phép trên cổng 3000 :

  • sudo ufw allow 3000

Sau đó, khởi động server với cờ --binding , để liên kết với IP server của bạn:

  • rails server --binding=your_server_ip

Điều hướng đến http:// your_server_ip :3000 trong trình duyệt của bạn, nơi bạn sẽ thấy thông báo chào mừng Rails.

Khi bạn đã quan sát xung quanh, bạn có thể dừng server bằng CTRL+C

Với ứng dụng của bạn đã được tạo và đặt tại chỗ, bạn đã sẵn sàng bắt đầu xây dựng từ bảng soạn sẵn Rails để tạo một ứng dụng duy nhất.

Bước 3 - Dàn dựng ứng dụng

Để tạo ứng dụng thông tin cá mập của bạn , ta cần tạo một mô hình để quản lý dữ liệu ứng dụng của bạn , các khung nhìn để cho phép user tương tác với dữ liệu đó và một bộ điều khiển để quản lý giao tiếp giữa mô hình và các khung nhìn. Để xây dựng những thứ này, ta sẽ sử dụng lệnh rails generate scaffold , lệnh này sẽ cung cấp cho ta một mô hình, một sự di chuyển database để thay đổi schemas database , một bộ điều khiển, một tập hợp đầy đủ các chế độ xem để quản lý Tạo, Đọc, Cập nhật và Xóa (CRUD) hoạt động cho ứng dụng và các mẫu cho các phần, trình trợ giúp và kiểm tra.

Vì lệnh generate scaffold có rất nhiều tác dụng đối với ta , nên ta sẽ xem xét kỹ hơn các tài nguyên mà nó tạo ra để hiểu công việc mà Rails đang thực hiện.

Lệnh generate scaffold của ta sẽ bao gồm tên của mô hình của ta và các trường ta muốn trong bảng database của ta . Rails sử dụng Active Record để quản lý mối quan hệ giữa dữ liệu ứng dụng, được xây dựng dưới dạng đối tượng với các mô hình và database ứng dụng. Mỗi mô hình của ta là một lớp Ruby , đồng thời kế thừa từ lớp ActiveRecord::Base . Điều này nghĩa là ta có thể làm việc với lớp mô hình của bạn theo cách giống như cách ta làm việc với lớp Ruby, đồng thời lấy các phương thức từ Active Record. Active Record sau đó sẽ đảm bảo mỗi lớp được ánh xạ tới một bảng trong database của ta và mỗi version của lớp đó vào một hàng trong bảng đó.

Nhập lệnh sau để tạo mô hình Shark , bộ điều khiển và các dạng xem liên quan:

  • rails generate scaffold Shark name:string facts:text

Với name:stringfacts:text ta đang cung cấp cho Rails thông tin về các trường mà ta muốn trong bảng database của bạn và loại dữ liệu mà chúng nên chấp nhận. Cả hai sẽ cung cấp cho ta chỗ để nhập những gì ta muốn, mặc dù text sẽ cho phép nhiều ký tự hơn cho sự kiện cá mập.

Khi gõ lệnh này, bạn sẽ lại thấy một danh sách dài các kết quả giải thích mọi thứ mà Rails đang tạo cho bạn. Kết quả bên dưới nêu bật một số điều quan trọng hơn đối với cài đặt của ta :

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 . . .

Rails đã tạo mô hình tại app/models/shark.rb và di chuyển database để đi cùng với nó: db/migrate/ 20190804181822 _create_sharks.rb . Dấu thời gian trên file di chuyển của bạn sẽ khác với những gì bạn thấy ở đây.

Nó cũng đã tạo một bộ điều khiển, app/controllers/sharks_controller.rb , cũng như các chế độ xem được liên kết với hoạt động CRUD của ứng dụng của ta , được thu thập trong app/views/sharks . Trong số các chế độ xem này có một phần, _form.html.erb , chứa mã được sử dụng trên các chế độ xem.

Cuối cùng, Rails đã thêm một tuyến tài nguyên mới, resources :sharks , vào config/routes.rb . Điều này cho phép bộ định tuyến Rails khớp các yêu cầu HTTP đến với bộ điều khiển sharks và các khung nhìn liên quan của nó.

Mặc dù Rails đã thực hiện rất nhiều công việc xây dựng mã ứng dụng cho ta , nhưng bạn nên xem một số file để hiểu điều gì đang xảy ra.

Đầu tiên, hãy xem file điều khiển bằng lệnh sau:

  • cat app/controllers/sharks_controller.rb
Output
class 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 # Use callbacks to share common setup or constraints between actions. def set_shark @shark = Shark.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def shark_params params.require(:shark).permit(:name, :facts) end end

Bộ điều khiển chịu trách nhiệm quản lý cách thông tin được tìm nạp và chuyển đến mô hình liên quan của nó và cách nó được liên kết với các dạng xem cụ thể. Như bạn thấy , bộ điều khiển sharks của ta bao gồm một loạt các phương pháp ánh xạ gần đúng với các hoạt động CRUD tiêu chuẩn. Tuy nhiên, có nhiều phương pháp hơn chức năng CRUD, để kích hoạt hiệu quả trong trường hợp có lỗi.

Ví dụ: hãy xem xét phương pháp create :

~ / sharkapp / app / controllers / shark_controller.rb
. . .   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 . . .  

Nếu một version mới của lớp Shark được lưu thành công, redirect_to sẽ tạo ra một yêu cầu mới sau đó được chuyển hướng đến bộ điều khiển. Đây sẽ là một yêu cầu GET và nó sẽ được xử lý bằng phương thức show , phương thức này sẽ hiển thị cho user con cá mập mà họ vừa thêm vào.

Nếu không thành công, thì Rails sẽ hiển thị lại mẫu app/views/sharks/new.html.erb thay vì đưa ra một yêu cầu khác tới bộ định tuyến, cho user một cơ hội khác để gửi dữ liệu của họ.

Ngoài bộ điều khiển cá mập, Rails đã cung cấp cho ta một mẫu cho chế độ xem index , bản đồ này ánh xạ tới phương thức index trong bộ điều khiển của ta . Ta sẽ sử dụng nó làm chế độ xem root cho ứng dụng của bạn , vì vậy bạn nên xem qua nó.

Nhập nội dung sau để xuất file :

  • cat app/views/sharks/index.html.erb
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 %>

Chế độ xem index lặp lại qua các version của lớp Shark của ta , đã được ánh xạ tới bảng sharks trong database của ta . Sử dụng tạo khuôn mẫu ERB , dạng xem xuất ra từng trường từ bảng được liên kết với một cá thể cá mập riêng lẻ: namefacts .

Sau đó, dạng xem sử dụng trình trợ giúp link_to để tạo siêu liên kết, với chuỗi được cung cấp làm văn bản cho liên kết và đường dẫn được cung cấp làm đích. Bản thân các con đường được thực hiện thông qua các trợ giúp có sẵn cho ta khi ta xác định tuyến đường tháo vát của sharks với lệnh rails generate scaffold .

Ngoài việc xem xét chế độ xem index của ta , ta cũng có thể xem chế độ xem new để xem cách Rails sử dụng các thành phần trong các chế độ xem. Nhập thông tin sau để xuất ra mẫu app/views/sharks/new.html.erb :

  • cat app/views/sharks/new.html.erb
Output
<h1>New Shark</h1> <%= render 'form', shark: @shark %> <%= link_to 'Back', sharks_path %>

Mặc dù mẫu này có thể trông giống như thiếu các trường đầu vào cho một mục nhập cá mập mới, nhưng tham chiếu đến render 'form' cho ta biết rằng mẫu đang kéo phần _form.html.erb , phần này extract mã được lặp lại trên các chế độ xem.

Nhìn vào file đó sẽ cho ta cảm nhận đầy đủ về cách một cá thể cá mập mới được tạo:

  • cat app/views/sharks/_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 %>

Mẫu này sử dụng trình trợ giúp form_with form . Trình trợ giúp biểu mẫu được thiết kế để tạo thuận lợi cho việc tạo các đối tượng mới từ đầu vào của user bằng cách sử dụng các trường và phạm vi của các mô hình cụ thể. Ở đây, form_with mất model: shark như một cuộc tranh cãi, và các đối tượng hình thức xây dựng mới mà nó tạo ra có đầu vào trường tương ứng với các trường trong sharks bảng. Do đó user có trường biểu mẫu để nhập cả một con cá mập name và cá mập facts .

Việc gửi biểu mẫu này sẽ tạo phản hồi JSON với dữ liệu user mà phần còn lại của ứng dụng của bạn có thể truy cập bằng phương thức tham số , phương thức này sẽ tạo đối tượng ActionController::Parameters với dữ liệu đó.

Đến đây bạn đã biết rails generate scaffold đã tạo ra cho bạn, bạn có thể chuyển sang cài đặt chế độ xem root cho ứng dụng của bạn .

Bước 4 - Tạo Chế độ xem root ứng dụng và Chức năng Kiểm tra

Lý tưởng nhất là bạn muốn trang đích của ứng dụng của bạn ánh xạ tới folder root của ứng dụng, để user có thể hiểu ngay mục đích của ứng dụng.

Có một số cách bạn có thể xử lý vấn đề này: ví dụ: bạn có thể tạo bộ điều khiển Welcome và chế độ xem index liên kết, điều này sẽ cung cấp cho user một trang đích chung cũng có thể liên kết đến các phần khác nhau của ứng dụng. Tuy nhiên, trong trường hợp của ta , việc để user truy cập vào chế độ xem cá mập index của ta sẽ đủ để giới thiệu về mục đích của ứng dụng lúc này.

Để cài đặt điều này, bạn cần phải sửa đổi cài đặt định tuyến trong config/routes.rb để chỉ định root của ứng dụng.

Mở config/routes.rb để chỉnh sửa, sử dụng nano hoặc editor bạn quen dùng :

  • nano config/routes.rb

Tệp sẽ trông như thế này:

~ / sharkapp / config / route.rb
Rails.application.routes.draw do   resources :sharks   # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end 

Nếu không đặt thứ gì đó cụ thể hơn, chế độ xem mặc định tại http://localhost:3000 hoặc http:// your_server_ip :3000 sẽ là trang chào mừng Rails mặc định.

Để ánh xạ chế độ xem root của ứng dụng sang chế độ xem index của trình điều khiển cá mập, bạn cần thêm dòng sau vào file :

~ / sharkapp / config / route.rb
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 

Như vậy, khi user chuyển đến folder root ứng dụng của bạn, họ sẽ thấy danh sách đầy đủ về cá mập và có cơ hội tạo mục nhập cá mập mới, xem các mục hiện có và chỉnh sửa hoặc xóa các mục đã cho.

Lưu file và thoát khỏi editor khi bạn chỉnh sửa xong. Nếu bạn đã sử dụng nano để chỉnh sửa file , bạn có thể thực hiện bằng cách nhấn CTRL+X , Y , sau đó ENTER

Đến đây bạn có thể chạy quá trình di chuyển của bạn bằng lệnh sau:

  • rails db:migrate

Bạn sẽ thấy kết quả xác nhận việc di chuyển.

Khởi động lại server Rails của bạn. Nếu bạn đang làm việc tại local , hãy nhập:

  • rails s

Trên server phát triển, nhập:

  • rails s --binding=your_server_ip

Điều hướng đến localhost:3000 nếu bạn đang làm việc local hoặc http:// your_server_ip :3000 nếu bạn đang làm việc trên server phát triển.

Trang đích ứng dụng của bạn sẽ giống như sau:

Trang đích ứng dụng

Để tạo một con cá mập mới, hãy nhấp vào liên kết Cá mập mới ở cuối trang, liên kết này sẽ đưa bạn đến sharks/new đường sharks/new :

Tạo Shark mới

Hãy thêm một số thông tin demo để kiểm tra ứng dụng của ta . Nhập “Great White” vào trường Tên và “Đáng sợ” vào trường Sự kiện :

Thêm cá mập trắng lớn

Bấm vào nút Tạo để tạo cá mập.

Điều này sẽ hướng bạn đến lộ show , nhờ bộ lọc before_action , được đặt bằng phương thức set_shark , lấy id của cá mập mà ta vừa tạo:

~ / sharkapp / app / controllers / shark_controller.rb
class SharksController < ApplicationController   before_action :set_shark, only: [:show, :edit, :update, :destroy]    . . .     def show   end    . . .     private     # Use callbacks to share common setup or constraints between actions.     def set_shark       @shark = Shark.find(params[:id])     end   . . . 

Hiển thị Shark

Bạn có thể kiểm tra chức năng chỉnh sửa ngay bây giờ bằng cách nhấp vào Chỉnh sửa trên mục nhập cá mập của bạn. Điều này sẽ đưa bạn đến lộ trình edit cho con cá mập đó:

Chỉnh sửa Shark

Thay đổi facts về Great White thành “Large” thay vì “Scary” và nhấp vào Update Shark . Điều này sẽ đưa bạn trở lại lộ show :

Cập nhật Shark

Cuối cùng, nhấp vào Quay lại sẽ đưa bạn đến chế độ xem index cập nhật của bạn:

Chế độ xem index  mới

Đến đây bạn đã kiểm tra chức năng cơ bản của ứng dụng, bạn có thể thêm một số xác thực và kiểm tra bảo mật để làm cho mọi thứ an toàn hơn.

Bước 5 - Thêm xác thực

Ứng dụng cá mập của bạn có thể chấp nhận đầu vào từ user , nhưng hãy tưởng tượng trường hợp user cố gắng tạo một con cá mập mà không thêm dữ kiện vào nó hoặc tạo mục nhập cho một con cá mập đã có trong database . Bạn có thể tạo cơ chế để kiểm tra dữ liệu trước khi dữ liệu được nhập vào database bằng cách thêm xác nhận vào mô hình của bạn. Vì logic của ứng dụng của bạn được đặt trong các mô hình của nó, việc xác thực dữ liệu đầu vào ở đây có ý nghĩa hơn so với việc làm như vậy ở những nơi khác trong ứng dụng.

Lưu ý ta sẽ không đề cập đến việc viết các bài kiểm tra xác thực trong hướng dẫn này, nhưng bạn có thể tìm hiểu thêm về kiểm thử bằng cách tham khảo tài liệu Rails .

Nếu bạn vẫn chưa dừng server , hãy tiếp tục và thực hiện việc đó bằng lệnh CTRL+C

Mở file mô hình shark.rb của bạn:

  • nano app/models/shark.rb

Hiện tại, file cho ta biết rằng lớp Shark kế thừa từ ApplicationRecord , lớp này kế thừa từ ActiveRecord::Base :

~ / sharkapp / app / models / shark.rb
class Shark < ApplicationRecord end 

Trước tiên, hãy thêm một số xác thực vào trường name của ta để xác nhận trường đã được điền và mục nhập là duy nhất, ngăn các mục nhập trùng lặp:

~ / sharkapp / app / models / shark.rb
class Shark < ApplicationRecord   validates :name, presence: true, uniqueness: true end 

Tiếp theo, thêm xác thực cho trường facts đảm bảo rằng nó cũng được điền:

~ / sharkapp / app / models / shark.rb
class Shark < ApplicationRecord   validates :name, presence: true, uniqueness: true   validates :facts, presence: true end 

Ở đây, ta ít quan tâm đến tính độc nhất của các dữ kiện, miễn là chúng có liên quan đến các mục cá mập độc nhất.

Lưu file khi bạn hoàn tất.

Khởi động lại server của bạn bằng rails s hoặc rails s --binding= your_server_ip , tùy thuộc vào việc bạn đang làm việc local hay với server phát triển.

Điều hướng đến folder root của ứng dụng của bạn tại http://localhost:3000 hoặc http:// your_server_ip :3000 .

Nhấp vào Cá mập mới . Trong biểu mẫu, thêm “Great White” vào trường Tên và “Răng to” vào trường Sự kiện , sau đó nhấp vào Tạo cá mập . Bạn sẽ thấy cảnh báo sau:

Cảnh báo xác thực duy nhất

Bây giờ, hãy xem liệu ta có thể kiểm tra xác nhận khác của bạn hay không. Nhấp vào Quay lại để quay lại trang chủ, sau đó nhấp vào Cá mập mới . Trong biểu mẫu mới, hãy nhập "Tiger Shark" vào trường Tên và để trống Dữ kiện . Nhấp vào Create Shark sẽ kích hoạt cảnh báo sau:

Cảnh báo sự thật hiện diện

Với những thay đổi này, ứng dụng của bạn có một số xác nhận đảm bảo tính nhất quán trong dữ liệu được lưu vào database . Như vậy, bạn có thể chuyển sự chú ý sang user ứng dụng của bạn và xác định ai có thể sửa đổi dữ liệu ứng dụng.

Bước 6 - Thêm xác thực

Với việc xác thực tại chỗ, ta có một số đảm bảo về dữ liệu đang được lưu vào database . Nhưng user thì sao? Nếu ta không muốn bất kỳ và tất cả user thêm vào database , thì ta nên thêm một số biện pháp xác thực đảm bảo rằng chỉ những user được phép mới có thể thêm cá mập. Để thực hiện việc này, ta sẽ sử dụng phương thức http_basic_authenticate_with , cho phép ta tạo kết hợp tên user và password để xác thực user .

Có một số cách để xác thực user với Rails, bao gồm cả làm việc với bcrypt hoặc phát minh devise đá quý. Tuy nhiên, hiện tại, ta sẽ thêm một phương thức vào bộ điều khiển ứng dụng của ta để áp dụng cho các hành động trên ứng dụng của ta . Điều này sẽ hữu ích nếu ta thêm nhiều bộ điều khiển hơn vào ứng dụng trong tương lai.

Dừng lại server của bạn bằng CTRL+C

Mở file xác định ApplicationController của bạn:

  • nano app/controllers/application_controller.rb

Bên trong, bạn sẽ thấy định nghĩa cho lớp ApplicationController , lớp mà các bộ điều khiển khác trong ứng dụng của bạn kế thừa:

~ / sharkapp / app / controllers / application_controller.rb
class ApplicationController < ActionController::Base end 

Để xác thực user , ta sẽ sử dụng tên user và password được mã hóa cứng với phương thức http_basic_authenticate_with . Thêm mã sau vào file :

~ / sharkapp / app / controllers / application_controller.rb
class ApplicationController < ActionController::Base   http_basic_authenticate_with name: 'sammy', password: 'shark', except: [:index, :show] end 

Ngoài việc cung cấp tên user và password ở đây, ta cũng đã hạn chế xác thực bằng cách chỉ định các tuyến mà nó không được yêu cầu: indexshow . Một cách khác để thực hiện điều này là only: [:create, :update, :destroy] viết only: [:create, :update, :destroy] . Bằng cách này, tất cả user sẽ có thể nhìn thấy tất cả các loài cá mập và đọc thông tin về các loài cá mập cụ thể. Tuy nhiên, khi nói đến việc sửa đổi nội dung trang web, user cần chứng minh rằng họ có quyền truy cập.

Trong một cài đặt mạnh mẽ hơn, bạn sẽ không muốn mã hóa các giá trị theo cách này, nhưng với mục đích demo , điều này sẽ cho phép bạn xem cách bạn có thể bao gồm xác thực cho các tuyến ứng dụng của bạn . Nó cũng cho phép bạn xem cách Rails lưu trữ dữ liệu phiên theo mặc định trong cookie: sau khi bạn xác thực trên một hành động được chỉ định, bạn sẽ không bị yêu cầu xác thực lại trong cùng một phiên.

Lưu và đóng app/controllers/application_controller.rb khi bạn chỉnh sửa xong. Đến đây bạn có thể kiểm tra xác thực trong thực tế.

Khởi động server bằng rails s hoặc rails s --binding= your_server_ip và chuyển đến ứng dụng của bạn tại http://localhost:3000 hoặc http:// your_server_ip :3000 .

Trên trang đích, nhấp vào nút Cá mập mới . Điều này sẽ kích hoạt cửa sổ xác thực sau:

Xác thực  User

Nếu bạn nhập tổ hợp tên user và password mà bạn đã thêm vào app/controllers/application_controller.rb , bạn có thể tạo một con cá mập mới một cách an toàn.

Đến đây bạn có một ứng dụng cá mập đang hoạt động, hoàn chỉnh với các xác thực dữ liệu và một sơ đồ xác thực cơ bản.

Kết luận

Ứng dụng Rails bạn đã tạo trong hướng dẫn này là một điểm khởi đầu mà bạn có thể sử dụng để phát triển thêm. Nếu bạn quan tâm đến việc khám phá hệ sinh thái Rails, thì tài liệu dự án là một nơi tuyệt vời để bắt đầu.

Bạn cũng có thể tìm hiểu thêm về cách thêm tài nguyên lồng nhau vào dự án của bạn bằng cách đọc Cách tạo tài nguyên lồng nhau cho ứng dụng Ruby on Rails , phần này sẽ chỉ cho bạn cách xây dựng các mô hình và tuyến ứng dụng của bạn.

Ngoài ra, bạn có thể cần khám phá cách cài đặt giao diện user mạnh mẽ hơn cho dự án của bạn với một khuôn khổ như React . Cách cài đặt dự án Ruby on Rails với React Frontend cung cấp hướng dẫn về cách thực hiện việc này.

Nếu bạn muốn khám phá các tùy chọn database khác nhau, bạn cũng có thể xem Cách sử dụng PostgreSQL với Ứng dụng Ruby on Rails của bạn trên Ubuntu 18.04 , hướng dẫn cách làm việc với PostgreSQL thay vì SQLite. Bạn cũng có thể tham khảo thư viện hướng dẫn PostgreSQL của ta để tìm hiểu thêm về cách làm việc với database này.


Tags:

Các tin liên quan