動的に生成されたクラスメソッドを記述することで自分のコードをDRYしようとしています。Rubyで動的に生成されるクラスに変数を渡す
私が欲しいのは、複数のエラークラスを持つことであるとClass.new {}
ブロックに、変数を渡すことができないので、私は、
ルビー
class ChatPolicy::Error < StandardError
ERROR_CLASSES = [
{ class_name: 'UserBlacklisted', message: 'Message 1' },
{ class_name: 'UserSuspended', message: 'Message 2' },
{ class_name: 'UserNotEligibleToRent', message: 'Message 3' },
{ class_name: 'MembershipTierNotAllowed', message: 'Message 4' }
]
ERROR_CLASSES.each do |cls|
Object.const_set(cls[:class_name], Class.new {
attr_reader :object
def initialize(object)
@object = object
@message = cls[:message]
end
})
end
end
ただし、次のコードを持っている。私はできませんメッセージ変数を初期化します。私はそれをどのように達成することができるのだろうか?話ではありません
ありがとう@マット。今は動作しますが、コンソールからの警告があります。 '1:warning:トップレベルの定数UserSuspendedはChatPolicy :: Error :: UserSuspendedによって参照されています'どうすれば解決できるのでしょうか? –
** ** **実際には、コンソールで 'ChatPolicy :: Error :: UserSuspended'と入力したときに' UserSuspended'になるので、実際には動作しません。 –
@ mudasobwaの解決策に基づいて解決策を見つけました。 'Object_const_set'は' const_set'だけ使う必要はありません。 –