ruby-on-rails - 如何在控制器中拥有与视图相同的功能访问权限
问题描述
我的视图中的某些功能(例如辅助功能)在我的控制器中无法访问。
我知道我可以在我的控制器中包含辅助功能以进行访问但是如果这个辅助功能调用另一个辅助功能我有一个 MethodError !
例子
在我看来:
...
<%= myHelperFunction %>
在助手中:
module Helper
def myHelperFunction
myHelper2Function # it's a call of another helper
end
end
在控制器中:
include Helper
def myRouteAction
myHelperFunction # no method error
Helper.myHelperFunction # no method error
myHelperFunction # i can call it BUT i've a no method error on the second function called
# myHelper2Function
end
解决方案
您不能include MyHelper
在控制器操作内,您必须在操作外添加此行,如下所示:
include MyHelper
def index
myHelperFunction1
end
现在,假设您有 2 个 Helpers -ArticlesHelper
并且PostsHelper
,那么您可以执行以下操作:
# articles_helper.rb
module ArticlesHelper
# Need to include this helper since you'll call `mnop` method from PostsHelper
include PostsHelper
def abcd
efgh
end
def efgh
"Hello from EFGH in ArticlesHelper"
end
def ijkl
# calls `mnop` method from PostsHelper
mnop
end
end
# posts_helper.rb
module PostsHelper
def mnop
"Hello from mnop from PostsHelper"
end
end
然后在您的任何控制器中,您可以执行以下操作:
include ArticlesHelper
def myRouteAction
@hello = abcd
@hello2 = ijkl
end
然后在您的视图中,执行以下操作:
<%= @hello %>
# "Hello from EFGH in ArticlesHelper"
<%= @hello2 %>
# "Hello from mnop from PostsHelper"
我认为上面的例子说明了所有的场景。
推荐阅读
- c++ - boost::asio::bind_executor() 行为,是有意的吗?
- perforce - 如何在 Ubuntu 上删除 perforce (p4)
- javascript - 根据条件更改 ID CSS
- php - PHP 杠杆 FatalErrorException
- javascript - 避免 useEffect 在第一次加载时渲染?
- r - 如何重命名图例并在 R 中包含调色板
- google-chrome - 是否可以在 Puppeteer 中模拟没有 javascript 的移动设备?
- python - 如何在 Apache Beam/Google 数据流中将大窗口缩减为小窗口?
- xamarin - 未从 B2C 登录返回
- flutter - 如何使用 webview 插件将网页保存在颤振中,以便用户可以离线查看?