2014-06-06 74 views
6

Kısa bir süre için Ruby on Rails ile çalışıyorum. Son zamanlarda başvurum için bir kimlik doğrulama sistemi uyguluyorum. Mevcut oturum açmış kullanıcıyı (current_user olarak adlandırılan yöntem) almak için 'application_helper.rb' adresinde bir yöntem hazırladım.Ruby On Rails: Kontrolörler ve görünümler için ortak yöntem kullanılabilir mi?

session[:user_id] değişkeni varsa, yöntem yalnızca User nesnesini geri alır. Ancak, aşağıdaki sorunla karşılaşıyorum. Ben 'application_helper.rb' in current_user yöntemi yerleştirirseniz ben 'application_controller.rb' in current_user yöntemi yerleştirirseniz

  1. , benim kontrolörleri bunun
  2. faydalanmak olamaz, benim kez görüldü kullanamaz

Bu sorunu çözmek için en iyi yaklaşım nedir? Kolay yolu, hem denetleyicide hem de yardımcıda kodumu çoğaltır, ancak daha iyi ve daha doğru bir yol olduğunu biliyorum. Bu yaygın ve iyi çözülmüş bir sorundur peşin

cevap

6

yılında

teşekkürler.

Raylar, denetleyicilerin yardımcı yöntemlere erişmesine izin vermez. Eğer görüş ve denetleyiciler arasında bir yöntemi paylaşmak isterseniz, helper_method ile denetleyicisi yöntemi tanımlamak ve sonra görüşleriniz için kullanılabilir hale gerekir:

class ApplicationController < ActionController::Bbase 

    # Let views access current_user 
    helper_method :current_user 

    def current_user 
    # ... 
    end 

end 

Sen birden fazla yöntem adı geçebilir Denetleyicinizde ek yöntemler görmek için helper_method:

helper_method :current_user, :logged_in? 

    def current_user 
    # ... 
    end 

    def logged_in? 
    !current_user.nil? 
    end 
+0

Bunun kadar basit bir şey olacağını biliyordum. Helper_method'un, metodu yardımcı sınıfta koymakla aynı şeyi yaptığını sanıyordum, ama değil. Hızlı cevap ve sözdizimi düzenlemesi için teşekkürler. :) – Lupi

+0

@meagar: Aynı problem var, ama helper metodunu ekledim, düzeltmedim, class_controller benim uygulama metodumda hem metodum hem de yardımcımı tanımladım. http://stackoverflow.com/questions/24993912/share-method-in-view-and-controller-ruby-on-rails-4 – user1876128