gpt4 book ai didi

ruby-on-rails - 如何在 Rails 模型中包含 gem 的类方法?

转载 作者:数据小太阳 更新时间:2023-10-29 08:48:03 25 4
gpt4 key购买 nike

我正在学习如何编写 gem。我想添加一些我将在 Rails 的用户模型中使用的方法。

# app/models/user.rb
class User
include Mongoid::Document
include Authme::Model # here's my gem.

field :password_digest, type: String
end
# Gemfile
gem 'authme'

现在,在我的 gem 中,我有以下内容:

- authme
- lib
+ authme
- model.rb
- authme.rb

这是 gem 的内容。

# lib/authme.rb
require 'authme/version'
require 'authme/model'
module Authme
end

# lib/authme/model.rb
module Authme
module Model
extend ActiveSupport::Concern

included do
include ActiveModel::SecurePassword
has_secure_password validations: false
before_create :create_session_token
end

module ClassMethods
def new_session_token
SecureRandom.urlsafe_base64
end

def encrypt(token)
Digest::SHA1.hexdigest(token.to_s)
end
end

private

def create_session_token
self.session_token = self.class.encrypt(self.class.new_session_token)
end
end
end

我将其添加到我的 gemspec 中:

spec.add_dependency "activesupport", "~> 4.0.1"

为了对此进行测试,在终端内,我尝试了 User.new_session_token 并得到了这个错误:

NoMethodError: undefined method `new_session_token' for User:Class

我做错了什么?我真的很想测试这个,但我力不从心。我不确定如何测试 User 类是否包含 gem 模块。

最佳答案

问题是您正在创建 Authme::ModelAuthme::Model::ClassMethods 但您从未真正添加 new_session_token 作为 Authme::Model 的类方法。

如果你想将这些方法添加到 Authme::Model 中,你需要做类似的事情

module Authme
module Model
module ClassMethods
# define all of your class methods here...
end

extend ClassMethods
end
end

这里的关键部分是 Object#extend .

关于ruby-on-rails - 如何在 Rails 模型中包含 gem 的类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21367641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com