2014-06-06 21 views
6

Tôi đã làm việc với Ruby on Rails trong một thời gian ngắn. Gần đây tôi đã triển khai một hệ thống xác thực cho ứng dụng của mình. Tôi đã thực hiện một phương thức có sẵn trên 'application_helper.rb' để truy xuất người dùng đã đăng nhập hiện tại (phương thức được gọi là current_user).Ruby on Rails: Phương pháp chung có sẵn cho bộ điều khiển và chế độ xem?

Phương pháp chỉ truy xuất đối tượng User nếu biến số session[:user_id] có mặt.

Tuy nhiên, tôi gặp phải sự cố sau.

  1. Nếu tôi đặt phương pháp current_user trong 'application_helper.rb', điều khiển của tôi không thể tận dụng nó
  2. Nếu tôi đặt phương pháp current_user trong 'application_controller.rb', của tôi lượt xem không thể sử dụng nó

Cách tiếp cận tốt nhất để giải quyết vấn đề này là gì? Cách dễ dàng sẽ được lặp lại mã của tôi trong cả hai bộ điều khiển và trợ giúp, nhưng tôi biết có một cách tốt hơn và chính xác hơn.

Cảm ơn trước

Trả lời

6

Đây là vấn đề phổ biến và được giải quyết tốt.

Rails không cho phép bộ điều khiển truy cập các phương thức trợ giúp. Nếu bạn muốn chia sẻ một phương pháp giữa quan điểm và các bộ điều khiển của bạn, bạn cần phải xác định phương pháp trong điều khiển của bạn, và sau đó làm cho nó có sẵn cho quan điểm của bạn với helper_method:

class ApplicationController < ActionController::Bbase 

    # Let views access current_user 
    helper_method :current_user 

    def current_user 
    # ... 
    end 

end 

Bạn có thể vượt qua nhiều tên phương pháp để helper_method để thực hiện các phương thức bổ sung trong bộ điều khiển của bạn cho chế độ xem của bạn:

helper_method :current_user, :logged_in? 

    def current_user 
    # ... 
    end 

    def logged_in? 
    !current_user.nil? 
    end 
+0

Tôi biết điều gì đó đơn giản như vậy. Tôi nghĩ helper_method đã làm tương tự như đặt phương thức trong lớp helper, nhưng nó không. Cảm ơn câu trả lời nhanh và chỉnh sửa cú pháp. :) – Lupi

+0

@meagar: Tôi có cùng một vấn đề, nhưng thêm phương pháp trợ giúp đã không sửa chữa nó, tôi đã xác định cả phương pháp của tôi và helper của tôi trong class_controller của tôi không điều khiển ứng dụng. http://stackoverflow.com/questions/24993912/share-method-in-view-and-controller-ruby-on-rails-4 – user1876128

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