重用多个Rails模型中的方法

rms*_*r25 6 ruby ruby-on-rails

初学者ruby/rails问题在这里.我有一个方法,我目前在我的"用户"模型中使用.

def generate_token(column) begin self[column] = SecureRandom.urlsafe_base64 end while User.exists?(column => self[column]) end

我想在不同的模型中重用相同的方法,比如说我的帐户模型.

在这个模型之间共享这样的代码的好地方在哪里?另外,为了获得调用类,我只使用"self.class"?

谢谢

pie*_*ard 7

Rails 4 concerns可以完成这项工作.http://api.rubyonrails.org/classes/ActiveSupport/Concern.html

app/models/user.rb:

class User < ActiveRecord::Base
  include TokenGenerator

  def foo
    $stderr.puts self.class.generate_token("bar")
  end
end
Run Code Online (Sandbox Code Playgroud)

app/models/account.rb:

class Account < ActiveRecord::Base
  include TokenGenerator

  class << self
    def bar
      return generate_token("foo")
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

app/models/concerns/token_generator.rb

module TokenGenerator
  extend ActiveSupport::Concern

  module ClassMethods
    def generate_token(c)
      return "some_thing"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)