2010-11-25 26 views
8

Tôi đang sử dụng tính năng này để truy cập phiên trong Mô hình.Xác nhận về triển khai Hành khách Apache: phiên truy cập đường ray trong mô hình

http://www.zorched.net/2007/05/29/making-session-data-available-to-models-in-ruby-on-rails/

Ai có thể khẳng định rằng nó sẽ làm việc với Apache + triển khai hành khách quá?

Hoặc nếu có bất kỳ giải pháp thay thế nào khác để đạt được điều tương tự?

Cảm ơn,

Imran

Trả lời

2

Yes. Đó là cách hiệu quả duy nhất tôi tìm thấy để sử dụng dữ liệu phiên trong mô hình. Tôi cũng sử dụng nó và không bao giờ phải đối mặt với bất kỳ vấn đề triển khai nào với hành khách Apache +.

Nhưng bạn cần phải xác nhận khi nào bạn sẽ chơi với các giá trị phiên. Trên mỗi yêu cầu mới cho máy chủ, giá trị phiên được lưu trữ trong chuỗi và chúng tôi có thể truy cập nó trong mô hình. Nếu bạn đang áp dụng bất kỳ logic nào bằng cách sử dụng giá trị chuỗi, thì hãy đảm bảo với tình huống khi giá trị chuỗi có thể là 0.

Vì tôi gặp sự cố khi phát triển, mỗi mã của tôi hoạt động tốt nhưng khi sản xuất, trong khi khởi động máy chủ, nó gây ra vấn đề ban đầu nó được coi là giá trị chuỗi là không.

+0

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

+0

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 –

25

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.

+0

Kỹ thuật hay. Cảm ơn bạn! – Saim

+0

Và làm thế nào tôi có thể kiểm tra nó đúng cách bằng Rspec? Tất cả các thử nghiệm của tôi cho mô hình tôi đang sử dụng này bây giờ nói 'undefined local variable hoặc method session'' –

+0

Nice solution thank you. –

Các vấn đề liên quan