8

का उपयोग कर रहा रेल 3.0.9 का उपयोग कर रहा है और प्रमाणीकरण के लिए तैयार। अब मैं एकल टेबल विरासत का उपयोग करने की कोशिश कर रहा हूं क्योंकि मुझे बहुरूपता का उपयोग करने की आवश्यकता है, इसलिए मेरे पास दो वर्ग हैं: UserType1 और UserType2, जो उपयोगकर्ता वर्ग से प्राप्त होते हैं। मुझे उपयोगकर्ता के प्रकार के आधार पर वर्तमान डिवाइस का सही ढंग से deise उदाहरण की आवश्यकता है।चिंतन करना: उदाहरण के current_user एकल तालिका भाग

उदाहरण के लिए,

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

मैं भी एक ही समस्या – maxiperez

+0

आप उन तालिका में 'प्रकार' कॉलम में जोड़ लिया है गया है? यही रेलवे एसटीआई काम करता है। – Salil

+0

मेरी बक्षीस को भूल जाओ, 'current_user' अच्छी तरह से तत्काल है। –

उत्तर

4

यह वास्तव में आप क्या जरूरत है: http://blog.jeffsaracco.com/ruby-on-rails-polymorphic-user-model-with-devise-authentication

आप, आपके आवेदन नियंत्रक में पथ विधि साइन इन ओवरराइड करने के लिए की जरूरत है आशा है कि यह मदद करते हैं।

+0

क्षमा करें, जैसा कि मैंने टिप्पणियों में कहा है + उत्तर, मेरी बक्षीस को भूल जाओ, 'current_user' वास्तव में एसटीआई तंत्र द्वारा तत्काल तत्काल है। मैं अब तक परीक्षण के बिना बहुत तेजी से इनाम रखा;) –

+0

कोई समस्या नहीं, मैं सिर्फ मदद करने के लिए :) – rbinsztock

+0

लिंक मृत :-(है कोशिश –

1

आप उपयोगकर्ता उप प्रकार में जोड़ने के लिए get_some_attribute विधि User अंदर मॉडल

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 

फिर, यह ओवरराइड करने के लिए इस तरह की आवश्यकता होगी:

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 

फिर, current_user.get_some_attribute आप उम्मीद के रूप में काम करेंगे , अगर आप रूबी में तरीकों अधिभावी बारे में अधिक पढ़ने के लिए करना चाहते हैं, तो आप के बारे में पढ़ सकते हैं यह here

जैसा कि मैंने मान लिया है कि आप, get_some_attribute में कुछ साझा तर्क के रूप में यह उपयोगकर्ता मॉडल में get_some_attribute फोन करेगा, तो आप इसे हटा सकते हैं यदि आप इसे ज़रूरत नहीं है मैं super गयी।

शुभकामनाएं!

+0

मैं केवल एक उपयोगकर्ता प्रकार का उपयोग करने की सलाह और भूमिकाओं पर निर्भर हैं। यह निर्धारित करने के लिए कि क्या करना है .. – simo

संबंधित मुद्दे