我有两个控制器,它们的助手方法名称相同,但返回的内容却不同:
class My1Controller < ApplicationController
helper_method :my_helper
def show
...
end
private
def my_helper
"Something from My1 controller"
end
end
class My2Controller < ApplicationController
helper_method :my_helper
def show
...
end
private
def my_helper
"Something from My2 controller"
end
end
在与app/views/my1/show.html.erb
相关的My1Controller
视图中,我想使用从my_helper
返回的My2Controller
的值。
我该怎么做?
答案 0 :(得分:0)
将您的my_helper
移到单独的帮助器中。
并将该助手返回到您要使用my_helper
# app/helpers/params_helper.rb
module ParamsHelper
def sort_params
params.permit(:sort).fetch(:sort, nil)
end
[...]
end
答案 1 :(得分:0)
最佳做法是将helper方法放入helper模块中,并通过view_context
在控制器中使用该方法,如下所示:
module ApplicationHelper
def fancy_helper(str)
str.titleize
end
end
class MyController < ApplicationController
def index
@title = view_context.fancy_helper "dogs are awesome"
end
end
答案 2 :(得分:0)
一种解决方案是使用Ruby元编程:
# app/views/my1/show.html.erb
<%= My2Controller.new.send(:my_helper) %>
但这是一种好的做法还是有更好的选择?
答案 3 :(得分:0)
在My1Controller
和My2Controller
中添加关注对象,
include HelperMethods
helper_method :my_helper1
然后在定义的模块中添加方法
module HelperMethods
private
def my_helper
"Something from My2 controller"
end
end
Helper方法名称应为uniq,它们与同一控制器使用,因此更新名称