【问题标题】:How to have a dynamic redirect in rails?如何在 Rails 中进行动态重定向?
【发布时间】:2013-10-15 16:30:52
【问题描述】:

如何添加动态重定向?我在ApplicationControllerApplicationHelper 中尝试过,但没有成功。

我想要这样的东西:

def dynamic_path
  if current_user.admin?
    admin_path
  else
    overview_path
  end
end

最好的做法是什么?

谢谢!

编辑:

哦,我忘了说我想把它放到我的 gem 中,它被两个不同的应用程序使用,并且都应该使用这个方法。我应该把它放在哪里?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 routes


    【解决方案1】:

    尝试将其放入ApplicationController,然后在应用程序控制器的顶部添加helper_method 行,如下所示:

    helper_method :dynamic_path
    
    def dynamic_path
      redirect_to (current_user.admin? ? admin_path : overview_path)
    end
    

    helper_method 行使此方法在您的所有视图和控制器中都可用。

    【讨论】:

    • 我将它添加到 gem 的 ApplicationController 中,但不起作用。知道为什么吗?
    • @Cojones 你在做什么样的宝石?我相信只有引擎风格的宝石才有应用程序控制器。如果您只需要共享一个辅助方法,则 Stuart M 制作 Railtie 的解决方案将比制作完整的引擎更好。
    • gem 已经存在并且是一个完整的引擎,它有很多功能,而且由于使用 gem 的两个应用程序都需要这个动态路径,我想我最好把它放在 gem 中?我仍在努力让 Railtie 工作。
    【解决方案2】:

    使用redirect_to:

    def dynamic_path
      redirect_to (current_user.admin? ? admin_path : overview_path)
    end
    

    更新:因为听起来您正在尝试将此帮助模块存储在外部 gem 中,您需要确保您的模块作为 ActionView 帮助程序加载,这可以自动完成通过在您的 gem 中使用 Railtie。见

    How do I extract Rails view helpers into a gem?

    【讨论】:

    • 这里也一样,在gem的ApplicationController里面好像找不到。
    • 您是否正确地从ApplicationController 中的 gem 中 include'ing 您的帮助模块?有关将 Gem 中的帮助模块自动包含到标准 ActionView 帮助程序集中的说明​​,请参阅stackoverflow.com/questions/5791211/…
    • 更新了我的回答也提到了这一点
    • 我一直在玩这个,甚至 1:1 复制它,只是更改了名称,它仍然无法正常工作:/Users/pbartels/Sites/e_core/lib/e_core/railtie.rb:4:in 'block in <class:Railtie>': uninitialized constant ECore::Railtie::RoutesHelper (NameError)
    • 您能否编辑您的帖子以包含相关的 Railtie 代码?听起来像是加载/需要文件的问题
    猜你喜欢
    • 2011-02-18
    • 2010-09-15
    • 1970-01-01
    • 2014-02-24
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    相关资源
    最近更新 更多