如何从 Ruby on Rails 中的字符串值创建变量名?
Posted
技术标签:
【中文标题】如何从 Ruby on Rails 中的字符串值创建变量名?【英文标题】:How to create a variable name from the value of a string in Ruby on Rails? 【发布时间】:2012-03-25 14:31:23 【问题描述】:我想在控制器中创建一个实例变量以在视图中使用:
foo = "bar"
instance_variable_set("#foo", "cornholio")
在视图中,使用@bar 以便:
@bar => "cornholio"
这会产生错误:'bar' is not allowed as an instance variable name
在 Rails 3.1 中工作
【问题讨论】:
【参考方案1】:我一直在寻找同一个问题的答案,但有不同的想法。因为其他人可能会在这里寻找我的答案,所以我的问题和解决方案:
我想在一个方法中调用 t(key, interpolation_var: value)。其中插值 _var:每次翻译都不同。 解决方案(我已删除所有不重要的信息,因此只有问题的解决方案可用。这就是该方法看起来无用的原因:)):
def some_function(key, interpolation_var, value)
t(key, :#interpolation_var => value)
end
【讨论】:
【参考方案2】:在 Ruby 中,实例变量名称始终必须以 @
sigil 开头。
【讨论】:
术语+1!有趣的是,在谷歌搜索时,en.wikipedia.org/wiki/Sigil_%28magic%29 排在 en.wikipedia.org/wiki/Sigil_%28computer_programming%29 之前。 这就是为什么人们会认为像 instance_variable_set 这样的方法会负责添加“@”的原因...【参考方案3】:这个instance_variable_set("#foo", "cornholio")
需要阅读instance_variable_set("@#foo", "cornholio")
基于this post。刚刚在我的 irb 中尝试了 Ruby 1.93;这篇文章是 2009 年的。
【讨论】:
似乎是一个非常常见的错误,如果它不存在,可以通过添加@
来自动纠正。以上是关于如何从 Ruby on Rails 中的字符串值创建变量名?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Ruby on Rails 中的数据库查询中消除 N+1 查询?
乘客(Ruby on Rails)中的301重定向从根域到www子域?
如何根据从下拉列表中选择的 CATEGORY 来控制 NEW/EDIT 视图中的列标题。带有 MYSQL 的 Ruby on Rails