如何在视图中使用来自另一个控制器的控制器帮助器方法?

时间:2019-01-21 00:26:44

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

我有两个控制器,它们的助手方法名称相同,但返回的内容却不同:

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的值。

我该怎么做?

4 个答案:

答案 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)

My1ControllerMy2Controller中添加关注对象,

  include HelperMethods
  helper_method :my_helper1

然后在定义的模块中添加方法

module HelperMethods
  private

  def my_helper
    "Something from My2 controller"
  end
end

Helper方法名称应为uniq,它们与同一控制器使用,因此更新名称