如何从 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子域?

ruby on rails 中的 Devkit 函数

如何根据从下拉列表中选择的 CATEGORY 来控制 NEW/EDIT 视图中的列标题。带有 MYSQL 的 Ruby on Rails

如何从 ruby​​ on rails 上的现有远程 oracle 数据库中获取数据

如何在 ruby​​ on rails 中发布数据