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.