在 Rails 辅助方法中访问请求对象

11

在我的application_helper.rb文件中,我有一个像这样的函数:

def find_subdomain
  request.domain
end
未定义本地变量或方法 `request'

我在另一个帮助程序中调用此方法。如何在不从控制器传递任何参数的情况下在帮助程序中获取域。


1
一个帮助器是否应该意识到 request - manu29.d
你可以随时使用 controller.request,但只使用 request 应该就可以了。至少在 Rails 4 中是这样的。 - Marcin Adamczyk
当我从控制器调用此方法时,它可以正常工作,但是当我在另一个帮助程序中调用此方法时,它会给我错误。 - Kishore Mohan
1
request 对象作为方法参数传递。 - Arup Rakshit
1
虽然你的代码看起来应该可以工作,但将请求对象显式传递到视图帮助程序中是更好的设计。 - Fuad Saud
显示剩余5条评论
3个回答

7

我知道这已经过时了,但最近我也碰到了同样的问题,所以我想提供一下我的建议。你可以将这个方法添加到你的ApplicationController中,并将其指定为一个helper_method

class ApplicationController < ActionController::Base
  helper_method :find_subdomain

  private

  def find_subdomain
    request.domain
  end
end

4
正如其他人提到的那样,应该将请求对象传递给您的助手,这样您就可以从视图(ERB)中传递它,如下所示:
<%= find_subdomain(request) %>

0

类 ApplicationController < ActionController::Base

helper :all

end


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接