8

kullanarak örnein. Şimdi tek tablo kalıtımını kullanıyorum çünkü polimorfizm kullanmam gerekiyor, bu yüzden iki sınıfım var: UserType1 ve UserType2, User sınıfından devralır. Kullanıcı türüne bağlı olarak o Devise örneğine current_user'a doğru ihtiyacım var. Örneğinvasiyet: örneği ben raylar 3.0.9 kullanıyorum ve doğrulama için hazırlamak am tek tablo devralma

,

class User < ActiveRecord::Base 
#devise and other user logic 
end 

class UserType1 < User 
    def get_some_attribute 
    return "Hello, my type is UserType1" 
    end 
end 

class UserType2 < User 
    def get_some_attribute 
    return "Hello, my type is UserType2" 
    end 
end 

In controller 

class MyController < ApplicationController 
    def action 
    @message = current_user.get_some_attribute #depending the type using polymorphism 
    render :my_view 
    end 
end 
+0

Ben de – maxiperez

+0

kullanıcıların tablosundaki 'türü' sütununu eklediniz aynı sorun var? Rails STI'nin çalışmasını sağlayan şey budur. – Salil

+0

Ödülümü unut, 'current_user' iyi örneklenmiş. –

cevap

4

öyle tam olarak neye ihtiyacınız: http://blog.jeffsaracco.com/ruby-on-rails-polymorphic-user-model-with-devise-authentication

bunu yardımcı umut, başvurunuz denetleyicisi yolu yönteminde işareti geçersiz kılmak gerekir.

+0

Üzgünüm, yorumlarda + cevapta söylediğim gibi, lütfumu unut, 'current_user' aslında STI mekanizması tarafından iyi örneklenmiş. Ben sadece link ölü :-(olduğunu :) –

+0

hiç problem – rbinsztock

+0

yardımcı olmaya çalışırız) –

1

Bunu, kullanıcı alt tiplerinde sonra

Module User < ActiveRecord::Base 

    #devise and other user logic 

    def get_some_attribute 
     #You can put shared logic between the two users type here 
    end 

end 

, bunu geçersiz kılmak için get_some_attribute yöntem modeli User içine eklemek gerekir:

Module UserType1 < User 

    def get_some_attribute 
     super 
     return "Hello, my type is UserType1" 
    end 

end 

Module UserType2 < User 

    def get_some_attribute 
     super 
     return "Hello, my type is UserType2" 
    end 

end 

Sonra current_user.get_some_attribute beklediğiniz olarak çalışacaktır Eğer Ruby yöntemleri geçersiz kılma hakkında daha fazla bilgi edinmek isterseniz, sen okuyabilirsiniz o here

Bunu gerekmiyorsa o, bunu kaldırabilir Kullanıcı modelinde get_some_attribute arayacak gibi, get_some_attribute bazı ortak mantığı farz gibi ben super ekledi.

İyi şanslar!

+0

Ben sadece bir kullanıcı türü kullanmak tavsiye ve rolleri bağlıdır; şimdiye kadar test etmeden çok hızlı ödül koydu. ne yapacağını belirlemek – simo