Giới thiệu
Khi tìm hiểu một ngôn ngữ hay một framework mới, cá nhân mình thấy cách tiếp cận tốt nhất là làm một app có đủ chức năng CRUD. Vậy trong bài viết này, hãy cùng mình viết 1 ứng dụng Rails có sử dụng React làm front end có
các chức năng CRUD nhé.
Khởi tạo ứng dụng Rails
Bắt đầu với câu lệnh quen thuộc để tạo một ứng dụng rails
:
1 2 | rails new fruits-app |
Sau đó thêm gem gem 'react-rails'
vào thư mục Gemfile và chạy lệnh bundle install
Tiếp theo chạy lệnh rails g react:install
. Câu lệnh này sẽ
- Thêm một vài thư viện Reactjs
//= requires
vào file application.js - Thêm thư mục
components/
cho React components
Các bạn có thể xem chi tiết hơn tại đây
Tiếp theo hãy thêm mộtmodel
có tên làFruit
. Ứng dụng này sẽ chỉ làm việc với mộtmodel
này
1 2 | rails g model Fruit name:string description:text |
Trong file db/seed.rb
thêm vào nội dung sau:
1 2 3 | fruits = ['Mango', 'Pineapple', 'Passion fruit', 'Dragonfruit'] fruits.each{|fruit| Fruit.create(name: fruit, description: "I am a delicious #{fruit}.")} |
Sau đó chạy lệnh rails db:migrate db:seed
để khởi tạo database và tạo dữ liệu
Thế là xong phần chuẩn bị môi trường và dữ liệu.
Controller
Trước tiên, trong file app/controllers/application_controller.rb
chúng ta thêm dòng sau:
1 2 3 4 | class ApplicationController < ActionController::Base protect_from_forgery with: :null_session end |
để hiểu rõ hơn về hàm protect_from_forgery
các bạn có thể xem thêm bài viết này
Ứng dụng của chúng ta dựa trên API do đó, cấu trúc thư mục controller
cần tuân theo quy ước không gian tên như sau: app/controllers/api/v1
.
Việc tạo phiên bản cho API có nghĩa là các thay đổi có thể được thực hiện trong tương lai mà không làm hỏng phiên bản gốc cụ thể ở đây là v1
.
Chúng ta sẽ tạo 1 file trong thư mục app/controllers/api/v1
có tên là fruits_controller.rb
. Trong file này chúng ta sẽ viết code để tạo các phương thức CRUD cơ bản.
class Api::V1::FruitsController < ApplicationController
def index
render json: Fruit.all
end def create
fruit = Fruit.create fruit_params
render json: fruit
end
def destroy
Fruit.destroy params
Nguồn bài viết : Viblo