Rails Console Shortcuts, Tips, and Tricks
Trong bài viết này, tôi sẽ giới thiệu với các bạn một vài phím tắt để thao tác với rails console khá hữu ích mà tôi thường xuyên sử dụng trên môi Linux Để xóa những câu lệnh cũ và những thông tin hiển thị trên màn hình để dễ nhìn hơn có thể dùng 1 trong 2 cách sau: Cách 1: Sử dụng tổ hợp phím ...
Trong bài viết này, tôi sẽ giới thiệu với các bạn một vài phím tắt để thao tác với rails console khá hữu ích mà tôi thường xuyên sử dụng trên môi Linux
Để xóa những câu lệnh cũ và những thông tin hiển thị trên màn hình để dễ nhìn hơn có thể dùng 1 trong 2 cách sau:
- Cách 1: Sử dụng tổ hợp phím Ctrl + L
- Cách 2: Gõ lệnh clear
Thông thường, khi đang sử dụng rails console mà bạn thay đổi mã code, bạn phải thoát ra rồi vào lại để cập nhật mã code mới rồi mới có thể sử dụng rails console với mà code mình vừa sửa. Tuy nhiên chúng ta có thể bỏ qua 2 thao tác này bằng 1 câu lệnh đơn giản: reload!
>> reload! Reloading... => true
Tuy nhiên, những đối tượng được khởi tạo trước khi gọi lệnh reload! vẫn tồn tại ở bản cũ. Ví dụ, trong rails console bạn có một đối là movie được lấy ra từ model Movie. Sau đó trong code bạn tạo 1 method mới tên là name trong model Movie . Ngay cả khi reload! lại console bạn vẫn ko thể dùng được method name cho đối tượng movie. Để sử dụng được thì sau khi reload! bạn cần khởi tạo lại đối tượng movie từ model Movie.
Việc ghi nhớ những câu lệnh là việc không hề đơn giản, đặc biệt là những câu lệnh dài và ít khi dùng đến. Mỗi khi muốn dùng lại mà bạn lại không nhớ chính xác nó viết đầy đủ như thế nào, bạn sẽ phải xem lại ở 1 tài liệu nào đó hoặc tìm cách dùng trên mạng. May mắn là Rails console hỗ trợ việc tìm kiếm các câu lệnh cũ khi bạn nhớ được 1 phần của câu lệnh. Bạn có thể dùng tổ hợp phím Ctrl + R, rồi nhập 1 phần câu lệnh mà bạn nhớ được, rails console sẽ hiện ra các câu lệnh cũ cho bạn.
Với những câu lệnh vừa mới dùng ngay trước đó thì bạn có thể sử dụng phím mũi tên lên để tìm lại.
Rails console hỗ trợ chức năng tự động hoàn thành. Giả sử bạn có model Movie. Trong console, bạn chỉ cần gõ Mov rồi ấn phím Tab:
>> Mov<Tab>
Nếu chỉ có kết quả trong trường hợp này thì nó sẽ tự động chuyển thành:
>> Movie
Trong trường hợp có nhiều kết quả thì bạn ấn Tab thêm lần nữa để show ra list kết quả để chọn.
>> Movie.w<Tab><Tab> Movie.where Movie.with_scope Movie.with_exclusive_scope Movie.with_warnings Movie.with_options
Một trick khá hay giúp tiết kiệm thời gian, mà tôi hay gặp trong thực tế.
Ví dụ khi bạn vừa chạy xong một câu lệnh:
>> Movie.where("total_gross >= ?", 100000000).order(:title)
Sau đó bạn chợt nhận ra, mình muốn làm gì đó với kết quả của câu lệnh này mà lại quên chưa bán biến cho kết quả này. Thông thường bạn có thể sử dụng mũi tên lên rồi gán biến vào đầu cầu lệnh. Tuy nhiên có 1 cách đơn giản hơn nhiểu, kết quả của biểu thức gần nhất được rails console lưu trong 1 biến đặc biệt được đặt tên là ký tự gạch dưới (_). Tiếp tục ví dụ trên thì ta chỉ cần gán kết quả của biểu thức vào 1 biến movies:
>> movies = _
Rails hỗ trợ những hàm đặc biệt sử dụng trong view mà chúng ta không thể dùng một cách thông thường trong rails console. Tuy nhiên ta có thể sử dụng chúng thông qua 1 biến có tên helper.
>> helper.pluralize(3, 'mouse') => "3 mice" >> helper.number_to_currency(1.50) => "$1.50" >> helper.truncate("Iron Man", length: 7) => "Iron..."
>> helper.title_tag(Movie.first) => "<title>Flix - Iron Man</title>" >> helper.poster_image_for(Movie.first) => "<img alt="Ironman" src="/assets/ironman.png" />"
Trick này không thường xuyên được sử dụng, tuy nhiên nó rất hữu ích khi bạn cần kiểm tra 1 đối tượng trong thời gian dài với nhiều câu lệnh. Ví dụ, bạn cần làm nhều thứ với đối tượng movie
>> movie = Movie.first >> movie.title => "Iron Man" >> movie.rating => "PG-13" >> movie.director => "Jon Favreau"
Việc gõ đi gõ lại từ movie làm bạn thấy phiền phức, bạn có thể đặt movie thành biến mặc định bằng câu lệnh:
>> irb movie
Lúc này bạn có thể gọi trực tiếp các method của movie mà không cần gõ movie ở đầu lệnh:
>> title => "Iron Man" >> rating => "PG-13" >> director => "Jon Favreau"
Để hủy bỏ biến mặc định này bạn dùng lệnh exit
>> exit => #<IRB::Irb: . . .>
Một tính năng vô cùng hữu dụng và cần thiết. Khi bạn muốn thực hiện rất nhiều thao tác với các đối tượng quan trọng mà lại sợ ảnh hưởng đến cơ sở dữ liệu. Bạn mong muốn 1 môi trường ảo cho bạn thoải mái làm việc mà dữ liệu thực của bạn không bị thay đổi theo. Sandbox hỗ trợ việc này. bạn chỉ cần thêm --sandbox khi chạy rails console:
$ rails console --sandbox Loading development environment in sandbox Any modifications you make will be rolled back on exit >>
Mọi thay đổi về dữ liệu sẽ trở lại như cũ khi bạn tắt console sandbox
>> User.destroy(1) >> User.find(1) ActiveRecord::RecordNotFound: Could not find User with id=1 >> exit (0.5ms) rollback transaction
https://pragmaticstudio.com/blog/2014/3/11/console-shortcuts-tips-tricks