从rails 3.1.0开始,默认在ActionView::Helper::TextHelper中的auto_link方法已经被移除,放到了第三方的gem里:rails_autolink.遂想试一下其功能,于是将rails_autolink写入rails程序中的Gemfile中,使用bundle install下载安装.打开irb,依次输入如下命令:
require "rails"
require 'action_view'
require 'rails_autolink'
include ActionView::Helpers::TextHelper
可以无法找到方法auto_link哦!查看rails_autolink中的helper.rb源代码文件,看到其是将auto_link放入了TextHelper模块中啊!遂写一个测试代码:
#!/usr/bin/ruby module M module ::ActionView module Helpers module ::TextHelper def xxx puts "xxx" end end end end end
然后执行 require './m.rb',然后使用ActionView::Helpers::TextHelper.instance_methods查看:
=> [:concat, :safe_concat, :truncate, :highlight, :excerpt, :pluralize, :word_wrap, :simple_format, :cycle, :current_cycle, :reset_cycle, :xxx, :raw, :safe_join]
发现xxx方法的确写入模块了!那么为毛auto_link无法写入呢?再看一下require 'rails_autolink'的开头包含代码,路径在gem which rails_autolink中:
module RailsAutolink class Railtie < ::Rails::Railtie initializer 'rails_autolink' do |app| ActiveSupport.on_load(:action_view) do require 'rails_autolink/helpers' end end end end
傻了吧!人家是需要在ActiveSupport加载的时候啊!估计是注册一个回调函数然后等加载action_view的时候再加载吧?我用load 'active_support.rb'然后再试还是不行.
解决办法有2个:
1.直接require 'rails_autolink/helpers'
2.在rails程序文件夹下使用rails console进入irb然后测试auto_link
时间: 2024-11-01 00:54:09