spree-auth-devise gem中有一个私有方法。该方法位于控制器UserSessionsController https://github.com/spree/spree_auth_devise/blob/master/lib/controllers/frontend/spree/user_sessions_controller.rb
内我希望覆盖“redirect_back_or_default”函数。
这可能吗?
在你的答案混合和匹配并进行一些谷歌搜索后,我得出了这个解决方案:
Spree::UserSessionsController.class_eval do
private
def redirect_back_or_default(default)
if default == "/admin/orders" or session["spree_user_return_to"] == "/admin/orders"
redirect_to("/admin/users")
else
redirect_to(session["spree_user_return_to"] || default)
end
session["spree_user_return_to"] = nil
end
end
我已将脚本文件放在config / initializers中。
谢谢大家。
答案 0 :(得分:4)
当然你可以覆盖私有方法:
class Super
private def i_am_private
'private method'
end
end
class Sub < Super
private def i_am_private
'overridden ' << super
end
end
Sub.new.send(:i_am_private)
# => 'overridden private method'
答案 1 :(得分:2)
你可以这样做:
class HelloWorld
def run
say_hello_world
end
private
def say_hello_world
puts "hello world"
end
end
HelloWorld.new.run
"hello world"
=> nil
现在让我们扩展/覆盖当前行为。
class HelloWorld
private
def say_hello_world
puts "Goodbye"
end
end
HelloWorld.new.run
"Goodbye"
=> nil
因此,既然这样可行,那么猴子修补它怎么样。 这样的事情:
class Spree::UserSessionsController < Devise::SessionsController
private
def redirect_back_or_default(default)
# your logic
end
end