Vinova tuyển lập trình viên Mobile & Web ở Hà Nội, lương $300-1000

Article: Dùng Fixtures để load dữ liệu từ file YAML, CSV vào database 1002

Rails
id.cntt.tv/nhanva 1
Updated over 5 years ago
Làm thế nào để load dữ liệu từ file CSV vào database trong khi test hoặc development được export từ database hoặc dữ liệu bảng tính. Rails đã cung cấp tính năng để bạn có thể làm việc này dễ dàng.
Fixtures là cách tổ chức dữ liệu mẫu dùng để test ứng dụng. Fixtures cho phép bạn đưa dữ liệu vào testing database trước khi những test của bạn chạy. Nó độc lập với database và tồn tại dưới 2 dạng format: YAML or CSV

-YAML là định dạng mặc định và được ưa thích vì nó có khả năng mô tả cấu trúc dữ liệu rất ngắn gọn và con người có thể đọc. YAML có phần mở rộng là .yaml. Định dạng của file YAML fixture có nội dung giống như:

Steven:
  id: 1
  first_name: Ruby on Rails
  last_name: http://www.rubyonrails.org
Patrick:
  id: 2
  first_name: Patrick
  last_name: Lenz

-CSV là định dạng tuyệt vời cho dữ liệu được export từ database hay từ dữ liệu bảng tính. Nội dung của file CSV fixtures được chia thành 2 phần: header và dữ liệu. Header là dòng đầu tiên của file . Mỗi dòng còn lại tuơng ứng sẽ là 1 record.Dạng file CSV fixtures có nội dung:

id, first_name, last_name
1, Steven, Holzner
2, Patrick, Lenz

Bởi vì dữ liệu trước đó trong database test luôn được xóa trước khi mỗi mỗi test case và dữ liệu trong database lúc này được lấy từ fixtures. Do đó ta cần đặt dòng code fixtures :authors

class Admin::AuthorControllerTest < Test::Unit::TestCase
 fixtures :authors
 ...
end

Ngoài khả năng chứa dữ liệu cho quá trình test, chúng ta có thể load dữ liệu trong quá trình migration bằng một ít thủ thuật.

Trước hết ta tạo folder data trong thư mục db/migrate/ rồi tạo file authors.csv trong thư mục vừa tạo và them nội dung vào file:

id, first_name, last_name
3, Christian, Hellsten

Tiếp theo tạo migration để load dữ liệu từ file fixture vào development database

ruby script/generate migration load_author_data

Và bước cuối cùng là viết một vài dòng code trong migration để lấy dữ liệu từ fixtures

require 'active_record/fixtures'
class LoadAuthorData < ActiveRecord::Migration
  def self.up
   directory = File.join(File.dirname(FILE), "data" )
   Fixtures.create_fixtures(directory, "authors" )
  end
  def self.down
  end
end

Quá trình đã hoàn tất. Khi chạy lệnh rake db:migrate dữ liệu tronh file sẽ đươc đưa vào trong database.

Comments

You must login to be able to comment

Uploaded files

No file uploaded yet

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content