मेरे आवेदन नियंत्रक में मुझे ए after_sign_in_path_for(resource)
उपयोगकर्ता या व्यवस्थापक साइन इन करने के बाद साइनइन मार्ग को बदलने की विधि।
मैं उपयोगकर्ता साइन को रूट में बदलना चाहता हूं यदि उनके पास कोई वर्तमान पद हैं, हालांकि मैं इसे "केस स्टेटमेंट के रूप में काम करने के लिए प्राप्त कर सकता हूं और न ही एक if स्टेटमेंट के साथ। यह वही है जो वर्तमान में मेरे पास है और यह काम करता है;"
def after_sign_in_path_for(resource)
case resource
when Admin then admin_root_path
when User then root_url
end
end
लेकिन मैं इसे इस तरह के एक बयान में बदलना चाहता हूं (या यदि आसान हो तो केस स्टेटमेंट), लेकिन यह काम नहीं करता है ...
def after_sign_in_path_for(resource)
if resource == User
if current_user.posts.count == 1
post_path(1)
else
root_url
end
elsif resource == Admin
admin_root_path
end
end
उत्तर:
जवाब के लिए 0 № 1रूबी में, केस स्टेटमेंट का उपयोग करता है मामला समानता ऑपरेटर ===। निम्नलिखित कोड पर विचार करें
>> User.new === User # false
>> User === User.new # true
>> User.new.is_a?(User) # true
case
समानता के लिए जाँच करने के लिए दूसरे कोड का उपयोग करता है। यह जानकर आप अपने कोड को बदल सकते हैं
if resource.is_a?(User)
...
elsif resource.is_a?(Admin)
...
end
आप भी उपयोग कर सकते हैं ===
परंतु is_a?
अधिक पठनीय है
if User === resource
...
elsif Admin === resource
...
end
ऐसा करने का एक और तरीका है और वह है संसाधन का वर्ग प्राप्त करना
if resource.class.name == "User"
यद्यपि आपको चेतावनी दी जाती है कि आप विरासत का उपयोग कर रहे हैं
class Foo; end
class Bar < Foo; end
bar = Bar.new
bar.is_a?(Foo) # true
Foo === bar # true