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中。
谢谢你们所有人。
发布于 2015-11-08 17:23:44
你可以这样做:
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发布于 2015-11-08 18:54:32
当然,您可以覆盖私有方法:
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'https://stackoverflow.com/questions/33592221
复制相似问题