【问题标题】:How to use controller method from lib with Rails?如何将lib中的控制器方法与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 方法移至控制器。你能把它写成答案吗?我会接受的:)

标签: ruby-on-rails ruby controller maintenance


【解决方案1】:

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

感谢@jphager2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多