Trong ruby trên đường ray khi thực hiện session[:foo] = nil
, nó để lại một mục có tên là :foo
trong đối tượng phiên. Làm cách nào bạn có thể loại bỏ mục nhập duy nhất đó khỏi đối tượng phiên?Làm thế nào để bạn xóa một mục duy nhất từ một ruby trên phiên đường ray?
Trả lời
Thực tế có một cách để xóa giá trị khỏi phiên. Giống như RichH cho biết biến phiên là một phiên bản CGI :: Session. Khi nhập một cái gì đó như session[:foo]
nó thực sự tìm kiếm biểu tượng đó trong một biến ví dụ @data
trong đối tượng phiên. Biến dữ liệu đó là một băm.
EDIT: Có một biến thể hiện dữ liệu trong lớp CGI :: Session. Nếu bạn đi đến số docs và xem mã nguồn cho phương pháp []=
, bạn sẽ thấy rằng có một thành viên @data
.
Vì vậy, để xóa session[:foo]
tất cả các bạn phải làm là truy cập mà @data
biến từ bên trong phiên
session.data[:foo]
Bây giờ để xóa nó:
session.data.delete :foo
Khi bạn làm điều này không nên có nhiều foo trong biến phiên của bạn.
Vì phiên là Ruby CGI::Session chứ không phải là băm, gọi xóa sẽ thực sự xóa phiên. Xóa không có tham số - đây là của tôi bạn đang nhận được thông báo "sai số đối số (1 hoặc 0)" khi bạn thử những gì hyuan gợi ý.
Cách được chấp nhận chung để xóa mục nhập phiên là với phiên [: foo] = nil như bạn đề xuất. Nó là xa lý tưởng, nhưng các câu như phiên [: foo] .nil? sẽ hoạt động như mong đợi.
Tôi thực sự muốn nó hoạt động như một Hash bình thường ... nhưng nó không.
Có vẻ như phiên bản đơn giản nhất hoạt động. Tất cả các cửa hàng (Cookie, Tệp, ActiveRecord, ...) sử dụng AbstractStore::SessionHash
làm đối tượng chứa dữ liệu, các cửa hàng khác nhau chỉ cung cấp phương tiện để tải và lưu các trường hợp AbstractStore::SessionHash
.
AbstractStore::SessionHash
thừa hưởng từ Hash
, vì vậy đây trì hoãn với phương pháp Hash#delete
:
session.delete(:key_to_delete)
- 1. Làm thế nào để bạn áp dụng một miếng vá lên ruby trên đường ray?
- 2. làm thế nào để bạn loại bỏ một phiên bản ngôn ngữ của một mục sitecore?
- 3. Làm thế nào để nói ruby trên đường ray, không phải để chèn vào một cột?
- 4. Làm thế nào để chọn một mục ngẫu nhiên từ một mảng trong ruby (không đường ray)
- 5. ruby tốt nhất trên đường ray cms
- 6. Làm thế nào để làm một hình thức phi mô hình trong ruby trên đường ray?
- 7. Làm thế nào để tải lên một tập tin trong ruby trên đường ray?
- 8. Làm thế nào để triển khai nhiều ứng dụng đường ray trên một IP duy nhất (Apache + Hành khách)?
- 9. làm thế nào để xây dựng một nhà cung cấp mở với ruby trên đường ray
- 10. Cách xóa bảng phiên đường ray
- 11. Làm thế nào để trống/hủy một phiên trong đường ray?
- 12. Làm thế nào để bạn sử dụng nhiều phiên bản đường ray với rbenv?
- 13. Cách triển khai chỉ mục duy nhất trên hai cột trong đường ray
- 14. Làm thế nào để thay đổi tuyến đường trong ruby trên đường ray?
- 15. Làm thế nào để triển khai một ứng dụng đường ray trên heroku từ travis-ci?
- 16. Làm thế nào để bạn xóa một RichTextBox WPF?
- 17. Làm thế nào để gỡ lỗi ruby trên đường ray trong eclipse aptana plugin
- 18. làm thế nào để nhúng một thiết bị đầu cuối bash linux bên trong ruby trên trang web đường ray?
- 19. Nhận html từ trang web có ruby trên đường ray
- 20. Ruby on Rails: Dưa chuột: làm thế nào để tôi Rake một tính năng duy nhất?
- 21. Làm thế nào để làm cho một tập tin từ xa với đường ray
- 22. Làm cách nào để có chỉ mục duy nhất và bình thường trên cùng một cột?
- 23. Làm thế nào để xác định đường dẫn của thư mục công cộng trong một ruby trên ứng dụng đường ray?
- 24. Làm thế nào để bạn chứng minh rằng một hàm duy nhất cho kiểu của nó?
- 25. làm thế nào để xóa một khóa từ một từ điển có giá trị cao nhất?
- 26. Làm thế nào để bạn quản lý các tệp định kiểu CSS và các phần đính kèm trong một ứng dụng ruby lớn trên đường ray?
- 27. Làm thế nào để vô hiệu hóa lựa chọn một mục duy nhất trong GridView
- 28. Làm thế nào để xóa một phiên PHP?
- 29. làm thế nào để thiết lập một cột như indexer duy nhất trên Sqlite
- 30. Làm thế nào để khôi phục một bảng duy nhất từ bản sao lưu .sql postgresql?
Là accross di động tất cả các cửa hàng phiên? Có vẻ hơi thân mật vì thuộc tính dữ liệu không được đề cập trong tài liệu. – RichH
Tôi thành thật không biết. Tôi phát hiện ra nó bằng cách sử dụng trình gỡ rối và kiểm tra biến phiên. Tôi đã có thể tìm thấy một chút hỗ trợ cho câu trả lời của tôi mặc dù, http://tinyurl.com/cp7ntm, kiểm tra các phương pháp cuối cùng, nơi họ chỉ định session_data = @ _session.data. Đó là điều tôi có thể tìm thấy nhiều nhất trên đó – vrish88
Tôi vừa cập nhật câu trả lời của mình với một nguồn tốt hơn cho một số tài liệu về chủ đề này. – vrish88