我在哪里把这个矩阵类放在我的rails应用程序中

时间:2012-01-29 11:34:57

标签: ruby-on-rails matrix

我希望使用此处显示的矩阵类:

http://rosettacode.org/wiki/Cholesky_decomposition#Ruby

在我的rails应用中。我已将该类复制到lib / matrix.rb

在我的视图页面中,我尝试使用代码测试此类:

<%= Matrix[[25,15,-5],[15,18,0],[-5,0,11]].cholesky_factor %>

但是我收到错误消息:

undefined method `cholesky_factor' for Matrix[[25, 15, -5], [15, 18, 0], [-5, 0, 11]]:Matrix

我做错了吗? (我在lib / matrix.rb中也有'矩阵'行'

2 个答案:

答案 0 :(得分:2)

require 'matrix'删除lib/matrix.rb

重命名为lib/extend_matrix.rb,以便我们专门加载。

config/application.rb

require File.expand_path('../boot', __FILE__)
require 'rails/all'

require 'matrix' # <-- moved here

#...bundler stuff...

module MyApp # <-- don't overwrite this!
  class Application < Rails::Application
     # ...
    config.autoload_paths << "#{::Rails.root.to_s}/lib" # <-- set path
    require "extend_matrix" # <-- forcibly load your matrix extension
  # ...

注意#{::Rails.root.to_s}。使用.to_s至关重要,因为::Rails.root会返回Pathname个对象。没有它,您将添加/lib(系统级别)到自动加载路径。我们想要/path/to/rails/lib(应用程序级别)。

请记住重新启动服务器。


这就是我为它工作的方式。如果有人知道如何在没有静态要求的情况下执行此操作,请分享。我确信这可以动态完成。

答案 1 :(得分:0)

我认为问题在于从未读过lib / matrix.rb。如果您使用的是Rails 3,则dir目录中的文件不会自动加载。按照this answer中的建议,在application.rb中添加以下行并重新启动服务器:

config.autoload_paths += Dir["#{config.root}/lib/**/"] # include all subdirectories