Хотя я уверен, что есть более ActiveModel
( RoR Guides , API - но это может быть не ActiveModel
, а аналогичный модуль) способ сделать это,с простым Ruby вы бы сделали это следующим образом:
r_v.send("count_#{r.b_id}_erg_bst=", 0)
По сути, вы «вызываете» метод count_..._erg...=
(метод, назначающий локальную переменную, определенную attr_accessor
) с аргументом 0
.
Для r.bid == 'my'
это будет то же самое, что и вызов r_v.count_my_erg_bst= 0
.
Обратите внимание, что это будет работать, только если что-то вроде attr_accessor :count_my_erg_bst
является частью определения вашего класса.
В противном случае вы можете сделать это более метапрограммирующим, например, rv.instance_eval { @count_my_erg_bst = 0 }
или потому, что вам нужна интерполяция строк rv.instance_eval " @count_#{r.bid}_erg_bst = 0 "
Обратите внимание на последствия для безопасности! Если r.bid
предоставляется пользователем, это может быть что-то вроде "a = 1; system("rm -rf /");"
или другой вредоносный код!