如何将lib中的控制器方法与Rails一起使用?

Posted

技术标签:

【中文标题】如何将lib中的控制器方法与Rails一起使用?【英文标题】:How to use controller method from lib with Rails? 【发布时间】:2015-05-11 05:42:27 【问题描述】:

我现在使用的是 Rails 4.2。

我在 lib 目录下创建了一个模块。我想从app/controllers/applicaiont_controller.rb调用维护方法,但是失败了:

NoMethodError in ProductsController#index
undefined method `redirect_to` for #<...>

我的 lib 模块如下:

module One
  class Display
    response = other_method
    if response.status == 200
      data = 'OK'
    else
      redirect_to_maintencance 'Maintenance ...'
    end
    data
  end
end

app/controllers/applicaiont_controller.rb

class ApplicationController < ActionController::Base
  # Other methods

  def redirect_to_maintencance(message = nil)
    redirect_to :maintencance, flash:  maintencance_message: message 
  end
end

【问题讨论】:

为什么#&lt;ProductsController&gt;会抛出这个错误?如果你只是想要另一个redirect_toish 助手,也许你可以在app/helpers/some_helper.rb 中定义它。 因为我想从 products_controller 使用 lib 目录下的那个模块。 然后包含ProductsController的代码。您提供的代码与错误无关。 这应该在辅助方法中。现在您的代码在类定义中,因此无法调用它。它只会执行一次(当另一个文件需要它时),然后你可能会得到一堆名称或没有方法错误。 @jphager2 谢谢。我已将 redirect_to 方法移至控制器。你能把它写成答案吗?我会接受的:) 【参考方案1】:

在 lib 模块中使用重定向方法不是一个好方法。 将状态检查逻辑移至控制器或助手。

感谢@jphager2。

【讨论】:

以上是关于如何将lib中的控制器方法与Rails一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 3 - 如何将语句从一个控制器打印到另一个

如何将 Polymer (1.0) 与 Rails (4) 一起使用?

如何将 HSQLDB 与 Ruby on Rails 一起使用。

Rails 5:如何将 $(document).ready() 与 turbo-links 一起使用

如何将redirect_to()与rails 3中当前params []数组中的所有内容一起使用?

如何将导入的gem中的vue组件加载到rails中的lib目录?