【问题标题】:In Ruby On Rails, I get "undefined method" error from a file that is being included在 Ruby On Rails 中,我从包含的文件中收到“未定义的方法”错误
【发布时间】:2015-04-09 16:46:39
【问题描述】:

我正在使用 Ruby On Rails 4,并使用 RefineryCMS。官方说,RefineryCMS 只适用于 Rails 3.2,但核心团队在 Github 上表示,最新版本的 RefineryCMS 应该适用于 Rails 4。

我需要添加一些自定义实例方法,所以我复制了文件:

cp vendor/bundle/ruby/2.0.0/bundler/gems/refinerycms-c8d8680bd4f5/pages/lib/refinery/pages/instance_methods.rb  lib/refinery/pages/

也许这对我来说有点懒惰,但我认为这会很快。然后我添加了一个方法,并在模板中调用它,但是我得到了未定义的方法”错误。在这个文件中:

app/views/refinery/_header.html.erb

我目前有这个代码:

                <div class="col-sm-24">
                    <%= Refinery::Pages::MenuPresenter.new(refinery_menu_pages, self).to_html %>
                </div>

                <%= SubMenuPresenter.new(build_sub_menu_pages(@current_sub_menu_pages), self).to_html %>

在 instance_methods.rb 中,我目前有这个代码:

  def refinery_menu_pages
    puts " hi "
    puts " hi "
    puts " hi "
    puts " hi "
    puts " hi "
    puts " hi "
    puts " hi "

    Menu.new Page.fast_menu
  end

  def build_sub_menu_pages(current_sub_menu_pages)
    puts " inside of  build_sub_menu_pages "
    Menu.new current_sub_menu_pages
  end

我可以在终端中看到所有的“hi”,所以我知道这个文件正在被读取。

SubMenuPresenter 简单定义为:

class SubMenuPresenter < Refinery::Pages::MenuPresenter
end

我最终会自定义 HTML/CSS,但我还没有做到这一点。

错误是:

undefined method `build_sub_menu_pages' 

它指向模板中的这一行:

<%= SubMenuPresenter.new(build_sub_menu_pages(@current_sub_menu_pages), self).to_html %>

但是,如果看到上面的方法,怎么可能看不到方法,正如终端中显示的“hi”所证明的那样?

【问题讨论】:

    标签: ruby-on-rails refinerycms


    【解决方案1】:

    我很傻。我错过了这个:

      def self.included(base)
        base.send :helper_method, :refinery_menu_pages
        base.send :alias_method_chain, :render, :presenters
      end
    

    所以我添加了 build_sub_menu_pages:

      def self.included(base)
        base.send :helper_method, :refinery_menu_pages, :build_sub_menu_pages
        base.send :alias_method_chain, :render, :presenters
      end
    

    这解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 2012-04-06
      相关资源
      最近更新 更多