Tôi không tìm thấy bất kỳ mã nào trên internet hoạt động, vì vậy tôi đã thực hiện một số nghiên cứu và viết bài của riêng mình. Nó hoạt động cho Rails 3.2.x và có lẽ trên một số phiên bản khác.
Insert này trong thư mục ApplicationController
# Set a filter that is invoked on every request
before_filter :_set_current_session
protected
def _set_current_session
# Define an accessor. The session is always in the current controller
# instance in @_request.session. So we need a way to access this in
# our model
accessor = instance_variable_get(:@_request)
# This defines a method session in ActiveRecord::Base. If your model
# inherits from another Base Class (when using MongoMapper or similar),
# insert the class here.
ActiveRecord::Base.send(:define_method, "session", proc {accessor.session})
end
tôi sẽ không nhắc nhở bạn rằng việc tiếp cận phiên của bạn từ một mô hình có thể dẫn đến mã xấu. Other posts may tell you, that you are stupid. Mặc dù có một số lý do hợp lệ để truy cập phiên từ mô hình của bạn, như triển khai phương thức Model.save
, giúp tiết kiệm cho phiên người dùng hiện tại.
Cảm ơn Nimsesh. Đây là kịch bản mà tôi cần truy cập phiên trong Model: 1. Trong ActiveRecord Observer để cập nhật trường - với giá trị từ phiên - cho mỗi bản ghi. 2. thiết lập trường current_user (restful_authentication). Mỗi người dùng có giữ giá trị khác nhau đang được đặt khi đăng nhập không? – Saim
Có. Chỉ cần nhìn lại ở đây http: //www.zorched.net/2007/05/29/making-session-data-available-to-models-in-ruby-on-rails/... Nó có 'before_filter: set_user 'lưu giá trị phiên trên mỗi yêu cầu mới cho chuỗi. Điều đó có nghĩa là mọi người dùng đều giữ giá trị khác nhau bởi vì yêu cầu của mọi người khác nhau và cách chuỗi tiếp tục cập nhật với các giá trị khác nhau –