【问题标题】:How do you access the 'request' object (or similar) from custom classes?您如何从自定义类访问“请求”对象(或类似对象)?
【发布时间】:2016-04-04 23:28:04
【问题描述】:

在我的 Rails 5 应用程序中,app/services 中有一个自定义类,我需要访问当前子域。

现在,各个方法可能如下所示:

...
def self.is_valid? req
  blacklist.exclude? req.subdomain
end

但这意味着我每次都需要传入request。这不是最优的,所以我想知道如何从类中访问 rails request 对象。

【问题讨论】:

  • 请记住,控制器中的request 只是一个返回请求对象的方法,它不是变量。

标签: ruby-on-rails ruby ruby-on-rails-5


【解决方案1】:

请求对象通常只能从控制器和视图访问。您可以像任何其他对象(依赖注入)一样将请求传递给需要它的方法,但是您的服务对象真的需要整个请求对象吗?为什么不只传递子域字符串?在我看来,服务对象不需要知道请求对象,因为这样的行为可能会更好地通过控制器方法来处理。

【讨论】:

  • 如果你使用一个在其中使用 url_for 的辅助方法呢?
【解决方案2】:

是的,它是一个特定于控制器的方法,需要在其他任何地方作为参数传递。这正是 Rails 的构建方式——全局变量将在所有客户端之间共享,并且控制器在每个客户端的基础上进行实例化。因此,没有全局“请求”对象,也没有内置方式来列出所有当前连接的用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    相关资源
    最近更新 更多