AuthenticationsController中的NoMethodError#为String创建未定义的方法`RandomString':Class

时间:2011-10-04 18:48:55

标签: ruby-on-rails devise mongoid omniauth

我按照本教程在devise + mongoid中安装omniauth:

https://github.com/fertapric/rails3-mongoid-devise-omniauth/wiki/OmniAuth-Installation-Tutorial

我设计了1.4.5 + omniauth 0.3.0 + rails 3.1.0。

我在 devise.rb 中有下一个信息:

config.omniauth :facebook, 'My_CONSUMER_KEY', 'MY_CONSUMER_SECRET', :scope => 'user_hometown, user_about_me, email'

在本教程中,此配置创建了initializers / omniauth.rb文件。

当我回到facebook回调时,我发现了这个错误:

NoMethodError in AuthenticationsController#create

undefined method `RandomString' for String:Class

app/models/user.rb:39:in `apply_trusted_services'
app/models/user.rb:23:in `apply_omniauth'
app/controllers/authentications_controller.rb:33:in `create_new_omniauth_user'
app/controllers/authentications_controller.rb:16:in `create'

我使用以下代码在 lib / string_extensions.rb 中创建了一个文件:

module StringExtensions
  def self.included(base) 
    String.extend StringExtensions::ClassMethods
  end
  module ClassMethods
    RAND_CHARS = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789"
    def RandomString(len)
      rand_max = RAND_CHARS.size
      ret = ""
      len.times{ ret << RAND_CHARS[rand(rand_max)] }
      ret
    end
  end
end

什么是我的问题

2 个答案:

答案 0 :(得分:1)

您需要在application.rb

中启用模块加载

答案 1 :(得分:0)

您可以将其放入config/initializers并自动加载,否则您必须使用凌乱的lib/

require手动加载