Ruby on Rails: как мне установить переменную на константу, где часть имени константы может измениться? - PullRequest
0 голосов
/ 15 июля 2010

хочу сделать

current_user.field = User::???????? * * 1004

Где ?????????? будет тем, кем я хотел бы быть

Это то, что я пытаюсь сделать

Given /^"([^\"]*)" is a(?:|n) "([^\"]*)"$/ do |arg1, arg2|
  cur_user = User.find(:first, :conditions => ['name = ?', arg1])
  cur_user.update_attributes(:role => User::arg2.constantize)
end

Хотя constantize не работает для этого использования, я знаю, что он будет работать в контексте Object.var.constantize

Ответы [ 3 ]

1 голос
/ 15 июля 2010

Какую проблему вы пытаетесь решить? Использование констант таким образом является запахом кода, вам, вероятно, следует использовать что-то вроде ActiveHash, если у вас есть набор значений перечисления или что-то, что нужно настроить.

Если вам нужно решить вашу проблему таким образом, проверьте const_defined? () И const_get () для этого. const_get () позволит вам вызывать динамическое значение для имени символьной / строковой константы без ее подтверждения.

http://ruby -doc.org / ядро ​​/ классов / Module.html # M001689

0 голосов
/ 15 июля 2010

Либо используйте:

"User::#{arg2}".constantize

или

User.const_get(arg2)
0 голосов
/ 15 июля 2010

Используйте

????????.constantize

Вы можете сделать любую вещь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...