Ruby on Rails 2.1 - Bộ điều khiển
Bộ điều khiển Rails là trung tâm logic của ứng dụng của bạn. Nó điều phối sự tương tác giữa người dùng, các chế độ xem và mô hình. Bộ điều khiển cũng là nơi chứa một số dịch vụ phụ trợ quan trọng.
Nó chịu trách nhiệm định tuyến các yêu cầu bên ngoài đến các hành động bên trong. Nó xử lý các URL thân thiện với mọi người cực kỳ tốt.
Nó quản lý bộ nhớ đệm, có thể cung cấp cho các ứng dụng mức tăng hiệu suất cấp độ lớn.
Nó quản lý các mô-đun trợ giúp, giúp mở rộng khả năng của các mẫu xem mà không làm tăng mã của chúng.
Nó quản lý các phiên, tạo cho người dùng ấn tượng về sự tương tác liên tục với các ứng dụng của chúng tôi.
Quy trình tạo bộ điều khiển rất dễ dàng và nó tương tự như quy trình chúng tôi đã sử dụng để tạo mô hình. Chúng tôi sẽ chỉ tạo một bộ điều khiển ở đây -
C:\ruby\library\> ruby script/generate controller Book
Lưu ý rằng bạn đang viết hoa Book và sử dụng dạng số ít. Đây là mô hình Rails mà bạn nên tuân theo mỗi khi tạo bộ điều khiển.
Lệnh này hoàn thành một số tác vụ, trong đó có những tác vụ sau đây:
Nó tạo ra một tệp có tên là app / controllers / book_controller.rb.
Nếu bạn xem book_controller.rb, bạn sẽ thấy nó như sau:
class BookController < ApplicationController
end
Các lớp bộ điều khiển kế thừa từ ApplicationController, là tệp khác trong thư mục bộ điều khiển: application.rb.
Các ApplicationController chứa mã có thể được chạy trong tất cả các bộ điều khiển của bạn và nó được thừa hưởng từ Rails lớp ActionController :: Base .
Bạn không cần phải lo lắng với ApplicationController, vì vậy hãy để chúng tôi xác định một số sơ khai phương thức trong book_controller.rb. Dựa trên yêu cầu của bạn, bạn có thể xác định bất kỳ số lượng chức năng nào trong tệp này.
Sửa đổi tệp để trông giống như sau và lưu các thay đổi của bạn. Lưu ý rằng bạn muốn đặt tên gì cho các phương pháp này, nhưng tốt hơn là bạn nên đặt tên có liên quan.
class BookController < ApplicationController
def list
end
def show
end
def new
end
def create
end
def edit
end
def update
end
def delete
end
end
Bây giờ chúng ta hãy thực hiện tất cả các phương pháp một.
Triển khai phương pháp danh sách
Phương thức danh sách cung cấp cho bạn bản in của tất cả các sách trong cơ sở dữ liệu. Chức năng này sẽ đạt được bằng các dòng mã sau.
def list
@books = Book.find(:all)
end
Dòng @books = Book.find (: all) trong phương thức danh sách yêu cầu Rails tìm kiếm bảng sách và lưu trữ từng hàng mà nó tìm thấy trong đối tượng cá thể @books.
Triển khai phương pháp hiển thị
Phương thức hiển thị chỉ hiển thị thêm chi tiết trên một cuốn sách. Chức năng này sẽ đạt được bằng các dòng mã sau.
def show
@book = Book.find(params[:id])
end
Dòng @books = Book.find (params [: id]) của phương thức hiển thị yêu cầu Rails chỉ tìm sách có id được xác định trong params [: id].
Các params đối tượng là một container cho phép bạn để vượt qua các giá trị giữa các cuộc gọi phương pháp. Ví dụ: khi bạn đang ở trên trang được gọi bằng phương thức danh sách, bạn có thể nhấp vào liên kết cho một cuốn sách cụ thể và nó chuyển id của cuốn sách đó qua đối tượng params để chương trình có thể tìm thấy cuốn sách cụ thể.
Triển khai phương pháp mới
Phương thức mới cho Rails biết rằng bạn sẽ tạo một đối tượng mới. Chỉ cần thêm mã sau vào phương pháp này.
def new
@book = Book.new
@subjects = Subject.find(:all)
end
Phương thức trên sẽ được gọi khi bạn sẽ hiển thị một trang cho người dùng để người dùng lấy đầu vào của người dùng. Ở đây dòng thứ hai lấy tất cả các đối tượng từ cơ sở dữ liệu và đặt chúng vào một mảng có tên là @subjects.
Triển khai phương thức tạo
Khi bạn lấy dữ liệu người dùng nhập bằng biểu mẫu HTML, đã đến lúc tạo bản ghi vào cơ sở dữ liệu. Để đạt được điều này, hãy chỉnh sửa phương thức tạo trong book_controller.rb để phù hợp với những điều sau:
def create
@book = Book.new(params[:book])
if @book.save
redirect_to :action => 'list'
else
@subjects = Subject.find(:all)
render :action => 'new'
end
end
Dòng đầu tiên tạo một biến phiên bản mới có tên là @book chứa đối tượng Sách được tạo từ dữ liệu mà người dùng đã gửi. Dữ liệu được chuyển từ phương thức mới để tạo bằng đối tượng params.
Dòng tiếp theo là câu lệnh điều kiện chuyển hướng người dùng đến listnếu đối tượng lưu chính xác vào cơ sở dữ liệu. Nếu nó không lưu, người dùng sẽ được đưa trở lại phương thức mới. Phương thức redirect_to tương tự như thực hiện làm mới meta trên một trang web và nó tự động chuyển tiếp bạn đến đích mà không cần bất kỳ tương tác nào của người dùng.
Sau đó, @subjects = Subject.find (: all) là bắt buộc trong trường hợp nó không lưu dữ liệu thành công và nó trở thành trường hợp tương tự như với tùy chọn mới.
Triển khai phương pháp chỉnh sửa
Phương thức chỉnh sửa trông gần giống với phương thức hiển thị. Cả hai phương pháp này đều được sử dụng để truy xuất một đối tượng dựa trên id của nó và hiển thị nó trên một trang. Sự khác biệt duy nhất là phương thức hiển thị không thể chỉnh sửa.
def edit
@book = Book.find(params[:id])
@subjects = Subject.find(:all)
end
Phương thức này sẽ được gọi để hiển thị dữ liệu trên màn hình để người dùng sửa đổi. Dòng thứ hai lấy tất cả các đối tượng từ cơ sở dữ liệu và đặt chúng vào một mảng có tên là @subjects.
Triển khai phương pháp cập nhật
Phương thức này sẽ được gọi sau phương thức chỉnh sửa khi người dùng sửa đổi dữ liệu và muốn cập nhật các thay đổi vào cơ sở dữ liệu. Phương pháp cập nhật tương tự như phương pháp tạo và sẽ được sử dụng để cập nhật sách hiện có trong cơ sở dữ liệu.
def update
@book = Book.find(params[:id])
if @book.update_attributes(params[:book])
redirect_to :action => 'show',
:id => @book
else
@subjects = Subject.find(:all)
render :action => 'edit'
end
end
Phương thức update_attributes tương tự như phương thức lưu được sử dụng bởi create, nhưng thay vì tạo một hàng mới trong cơ sở dữ liệu, nó sẽ ghi đè các thuộc tính của hàng hiện có.
Sau đó, dòng @subjects = Subject.find (: all) là bắt buộc trong trường hợp nó không lưu dữ liệu thành công, khi đó nó sẽ tương tự như tùy chọn chỉnh sửa.
Triển khai phương pháp xóa
Nếu bạn muốn xóa một bản ghi trong cơ sở dữ liệu thì bạn sẽ sử dụng phương pháp này. Thực hiện phương pháp này như sau.
def delete
Book.find(params[:id]).destroy
redirect_to :action => 'list'
end
Dòng đầu tiên tìm phân loại dựa trên tham số được truyền qua đối tượng params và sau đó xóa nó bằng phương thức hủy. Dòng thứ hai chuyển hướng người dùng đến phương thức danh sách bằng cách gọi redirect_to.
Các phương pháp bổ sung để hiển thị đối tượng
Giả sử bạn muốn cung cấp một cơ sở để người dùng duyệt qua tất cả các sách dựa trên một chủ đề nhất định. Bạn có thể tạo một phương thức bên trong book_controller.rb để hiển thị tất cả các chủ đề. Giả sử tên phương thức làshow_subjects:
def show_subjects
@subject = Subject.find(params[:id])
end
Cuối cùng, của bạn book_controller.rb tệp sẽ giống như sau:
class BookController < ApplicationController
def list
@books = Book.find(:all)
end
def show
@book = Book.find(params[:id])
end
def new
@book = Book.new
@subjects = Subject.find(:all)
end
def create
@book = Book.new(params[:book])
if @book.save
redirect_to :action => 'list'
else
@subjects = Subject.find(:all)
render :action => 'new'
end
end
def edit
@book = Book.find(params[:id])
@subjects = Subject.find(:all)
end
def update
@book = Book.find(params[:id])
if @book.update_attributes(params[:book])
redirect_to :action => 'show', :id => @book
else
@subjects = Subject.find(:all)
render :action => 'edit'
end
end
def delete
Book.find(params[:id]).destroy
redirect_to :action => 'list'
end
def show_subjects
@subject = Subject.find(params[:id])
end
end
Bây giờ, hãy lưu tệp bộ điều khiển của bạn và xuất bản cho nhiệm vụ tiếp theo.
Tiếp theo là gì?
Bạn đã tạo gần như tất cả các phương thức sẽ hoạt động trên phụ trợ. Tiếp theo, chúng ta sẽ tạo một đoạn mã để tạo ra màn hình hiển thị dữ liệu và lấy đầu vào từ người dùng.