如何将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
【问题讨论】:
为什么#<ProductsController>
会抛出这个错误?如果你只是想要另一个redirect_to
ish 助手,也许你可以在app/helpers/some_helper.rb
中定义它。
因为我想从 products_controller 使用 lib 目录下的那个模块。
然后包含ProductsController
的代码。您提供的代码与错误无关。
这应该在辅助方法中。现在您的代码在类定义中,因此无法调用它。它只会执行一次(当另一个文件需要它时),然后你可能会得到一堆名称或没有方法错误。
@jphager2 谢谢。我已将 redirect_to 方法移至控制器。你能把它写成答案吗?我会接受的:)
【参考方案1】:
在 lib 模块中使用重定向方法不是一个好方法。 将状态检查逻辑移至控制器或助手。
感谢@jphager2。
【讨论】:
以上是关于如何将lib中的控制器方法与Rails一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Polymer (1.0) 与 Rails (4) 一起使用?
如何将 HSQLDB 与 Ruby on Rails 一起使用。
Rails 5:如何将 $(document).ready() 与 turbo-links 一起使用