将方法从帮助程序传递到模块

时间:2014-04-20 16:45:30

标签: ruby-on-rails ruby ruby-on-rails-4

我有理由将content_tag方法从帮助程序传递到模块中:

module MyHelper
  def helper_method1(a, b)
    MyModule.module_method1(a, b, &content_tag)
  end
end

def MyModule
  def self.module_method1(a, b, &content_tag)
    #......
    my_tag = content_tag.call(:span, nil, class: "some_class123")
  end
end

我收到的错误是wrong number of arguments (0 for 1+)。我做错了什么?

1 个答案:

答案 0 :(得分:0)

你以错误的方式制作它,在你的代码中你尝试在方法中使用co pass block(不存在) 在这种情况下,你要么必须将它传递给你的助手方法,要么传递视图上下文并将content_at委托给这个上下文。

阻止委派

 module MyHelper
  def helper_method1(a, b, &block)
    MyModule.module_method1(a, b, &block)
  end
 end

 def MyModule
   include ActionView::Helpers::TagHelper

   def self.module_method1(a, b, &block)
     #......
     my_tag = content_tag(:span, &block, class: "some_class123")
   end
 end

传递视图上下文

 module MyHelper
  def helper_method1(a, b)
    MyModule.module_method1(a, b, self)
  end
 end

 def MyModule
   def self.module_method1(a, b, view_context)
     my_tag = view_context.content_tag(:span, nil, class: "some_class123")
   end
 end

考虑到include ActionView::Helpers::TagHelper在第一个例子中至关重要

您可以查看Using link_to in a class in a Rails helper它也可能有用