Ruby on Rails:如何将变量设置为常量,常量名称的一部分可以更改?

时间:2010-07-15 13:52:52

标签: ruby-on-rails ruby

我想做

current_user.field = User::????????

??????????将是我想要的任何内容

这就是我要做的事情

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 个答案:

答案 0 :(得分:1)

你想解决的问题是什么?以这种方式使用常量是一种代码气味,如果你有一组Enumeration值或者要配置的东西,你应该使用类似ActiveHash的东西。

如果您确实需要以这种方式解决问题,请查看const_defined?()和const_get()。 const_get()将允许您对符号/字符串常量名称执行动态值调用,而不对其进行常量化。

http://ruby-doc.org/core/classes/Module.html#M001689

答案 1 :(得分:0)

使用

????????.constantize

你可以做任何事情

答案 2 :(得分:0)

使用:

"User::#{arg2}".constantize

User.const_get(arg2)