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"?
谢谢
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)