【发布时间】:2019-11-23 04:16:05
【问题描述】:
这是我当前的 Rails 文件结构:
hello-app
app
assets
controller
helpers
models
application_record.rb
short_link.rb
obfuscate.rb
问题:obfuscate.rb 文件位于不属于它的 short_link.rb 文件旁边。
目标:我想将 obfuscate.rb 文件移动到其他位置,请参阅下面的新结构:
hello-app
app
assets
controller
helpers
models
application_record.rb
short_link.rb
services
models
obfuscate.rb
并将 obfuscate.rb 模块导入 short_link.rb 模型中。
这是我当前的 short_link.rb 模型文件:
require 'obfuscate'
class ShortLink < ApplicationRecord
include Obfuscate
def to_param
encrypt(id)
end
end
还有我的 obfuscate.rb 文件:
require 'openssl'
require 'base64'
module Obfuscate
def self.included(base)
base.extend self
end
def cipher
OpenSSL::Cipher::Cipher.new('aes-256-cbc')
end
def cipher_key
'custom_cipher_key'
end
def decrypt(value)
c = cipher.decrypt
c.key = Digest::SHA256.digest(cipher_key)
c.update(Base64.urlsafe_decode64(value.to_s)) + c.final
end
def encrypt(value)
c = cipher.encrypt
c.key = Digest::SHA256.digest(cipher_key)
Base64.urlsafe_encode64(c.update(value.to_s) + c.final)
end
end
另外,将 obfuscate.rb 文件移动到 hello-app>>app>>services>>models>>obfuscate.rb 是一个好习惯吗?或者这个额外的逻辑会有更好的位置吗?
【问题讨论】:
-
在 Rails 约定中,您可以将模型共享的 mixin 放在
/app/models/concerns/中。
标签: ruby-on-rails ruby