V ovládači mojej aplikácie mám after_sign_in_path_for(resource)
metóda na zmenu trasy prihlásenia po prihlásení používateľa alebo správcu.
Chcem zmeniť prihlásenie používateľa na trase v závislosti od toho, či má nejaké aktuálne príspevky, ale nemôžem ho donútiť, aby fungoval ako prípadový príkaz ani s príkazom if.To je to, čo momentálne mám a funguje to;
def after_sign_in_path_for(resource)
case resource
when Admin then admin_root_path
when User then root_url
end
end
ale chcem ho zmeniť na príkaz if, ako je tento (alebo prípadový príkaz, ak je to jednoduchšie), ale toto nefunguje ...
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
odpovede:
0 pre odpoveď č. 1Vo veci Ruby sa v tomto prípade uvádza operátor pre prípad rovnosti ===, Zvážte nasledujúci kód
>> User.new === User # false
>> User === User.new # true
>> User.new.is_a?(User) # true
case
používa druhý kód na kontrolu rovnosti. S týmto vedomím môžete zmeniť svoj kód na
if resource.is_a?(User)
...
elsif resource.is_a?(Admin)
...
end
Môžete tiež použiť ===
ale is_a?
je čitateľnejší
if User === resource
...
elsif Admin === resource
...
end
Existuje iný spôsob, ako to urobiť, a to získaním triedy zdroja
if resource.class.name == "User"
Upozorňujeme vás, ak využívate dedičstvo
class Foo; end
class Bar < Foo; end
bar = Bar.new
bar.is_a?(Foo) # true
Foo === bar # true