Custom assistant with alias_method_chain on Ruby on Rails in development mode [REDMINE]

I would like to configure the link_to_issue application_helper Redmine method with the alias_method_chain principle to save the Redmine code in the plugin, but I ran into a problem.

First of all, here is the patch file, application_helper_patch.rb :

  require_dependency 'application_helper' module ApplicationtHelperPatch def self.included(base) # :nodoc: base.send(:include, InstanceMethods) base.class_eval do unloadable alias_method_chain :link_to_issue, :custom_show end end module InstanceMethods def link_to_issue_with_custom_show(issue, options={}) title = nil subject = nil if options[:subject] == false title = truncate(issue.subject, :length => 60) else subject = issue.subject if options[:truncate] subject = truncate(subject, :length => options[:truncate]) end end s = link_to "#{h subject}", {:controller => "issues", :action => "show", :id => issue}, :class => issue.css_classes, :title => title s = "#{h issue.project} - " + s if options[:project] end end end 

And the init.rb plugin:

 require 'redmine' require 'application_helper_patch' Dispatcher.to_prepare do ApplicationHelper.send(:include, ApplicationtHelperPatch) unless ApplicationHelper.included_modules.include? ApplicationtHelperPatch end Redmine::Plugin.register :redmine_dt_capture do name 'my plugin' author 'Remi' description 'This is a plugin for Redmine' version '0.0.1' permission :dt, :public => true menu :top_menu, :dt, { :controller => 'my_controller', :action => 'index' }, :caption => ' my_plugin ' if RAILS_ENV == 'development' ActiveSupport::Dependencies.load_once_paths.reject!{|x| x =~ /^#{Regexp.escape(File.dirname(__FILE__))}/} end 

This solution works great in production mode, but not in development mode. When I run the application, I encounter this problem:

 NoMethodError in Issues#show Showing app/views/issues/show.html.erb where line #47 raised: undefined method `call_hook' for #<ActionView::Base:0x6b8b750> Extracted source (around line #47): 

Why is the call_hook method undefined in design mode?

thanks

+4
source share
1 answer

Try a more ordinary way to add a patch, maybe this will solve your problem.

put your patch in your_plugin / lib / plugin_name / patches /

and application_helper_patch.rb will become like this

 require_dependency 'application_helper' module PluginName module Patches module ApplicationtHelperPatch def self.included(base) # :nodoc: base.send(:include, InstanceMethods) base.class_eval do unloadable alias_method_chain :link_to_issue, :custom_show end end module InstanceMethods def link_to_issue_with_custom_show(issue, options={}) title = nil subject = nil if options[:subject] == false title = truncate(issue.subject, :length => 60) else subject = issue.subject if options[:truncate] subject = truncate(subject, :length => options[:truncate]) end end s = link_to "#{h subject}", {:controller => "issues", :action => "show", :id => issue}, :class => issue.css_classes, :title => title s = "#{h issue.project} - " + s if options[:project] end end end end end 

And the init.rb of the plugin:

 require 'redmine' require 'application_helper_patch' Dispatcher.to_prepare do ApplicationHelper.send(:include, PluginName::Patches::ApplicationtHelperPatch) unless ApplicationHelper.included_modules.include? PluginName::Patches::ApplicationtHelperPatch end Redmine::Plugin.register :redmine_dt_capture do name 'my plugin' author 'Remi' description 'This is a plugin for Redmine' version '0.0.1' permission :dt, :public => true menu :top_menu, :dt, { :controller => 'my_controller', :action => 'index' }, :caption => ' my_plugin ' if RAILS_ENV == 'development' ActiveSupport::Dependencies.load_once_paths.reject!{|x| x =~ /^#{Regexp.escape(File.dirname(__FILE__))}/} end 
0
source

All Articles