如何使用插件中的instance_eval覆盖类中的常量这是我要覆盖的常量
```
类MessageTemplate }结束 模块IndepthEinvoice TEMPLATE_KEYS = {
:guardian=>{
:guardian_full_name=>"guardian_full_name",
:guardian_first_name=>"guardian_first_name",
:guardian_last_name=>"guardian_last_name",
:ward_full_name=>"ward_full_name",
:guardians_relation=>"guardians_relation",
:ward_batch_name=>"ward_batch_name",
:ward_admission_number=>"ward_admission_number",
:guardian_email=>"guardian_email",
:guardian_mobile_phone_no=>"guardian_mobile_phone_no"
}
I wand to add below values to the above constant from a plugin in ruby on rails
this is the way I tried and failed
module MessageTemplate
def self.included(base)
base.instance_eval do
self.TEMPLATE_KEYS = {
:guardian=>{
:payment_link=>"payment_link",
:ward_balance_fee=>"ward_balance_fee"
}
}
end
end
TEMPLATE_KEYS = {
guardian: {
guardian_full_name: "guardian_full_name",
guardian_first_name: "guardian_first_name",
guardian_last_name: "guardian_last_name",
ward_full_name: "ward_full_name",
guardians_relation: "guardians_relation",
ward_batch_name: "ward_batch_name",
ward_admission_number: "ward_admission_number",
guardian_email: "guardian_email",
guardian_mobile_phone_no: "guardian_mobile_phone_no",
}
}
# make a copy of your TEMPLATE_KEYS constant
@my_template = TEMPLATE_KEYS.dup
# merge your modifications into an instance variable
@my_template[:guardian].merge!(
{
payment_link: "payment_link",
ward_balance_fee: "ward_balance_fee",
}
)
@my_template.dig :guardian, :payment_link
#=> "payment_link"
当然,还有其他方法可以做到这一点,有些方法比其他方法更优雅。但是,该原理是合理的,并且绝对比尝试直接修改该常量好,这可能会对您的应用程序产生意想不到的后果。