Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在RubyonRails中创建动态变量_Ruby On Rails_Ruby_Variables_Dynamic - Fatal编程技术网

Ruby on rails 在RubyonRails中创建动态变量

Ruby on rails 在RubyonRails中创建动态变量,ruby-on-rails,ruby,variables,dynamic,Ruby On Rails,Ruby,Variables,Dynamic,我试图根据星期几生成一个变量名。在我的html.erb文件中,我有以下代码: <%= "@selected_venue.open_time_"+Time.now.strftime('%a').downcase %> 我正在尝试创建一个变量,如“@selected_-vinge.open_-time_-mon”、“@selected_-vinge.open_-time_-tue”、“@selected_-vinge.open_-time_-wed”等。正如您所看到的,我在通用变量

我试图根据星期几生成一个变量名。在我的html.erb文件中,我有以下代码:

<%= "@selected_venue.open_time_"+Time.now.strftime('%a').downcase %>

我正在尝试创建一个变量,如“@selected_-vinge.open_-time_-mon”、“@selected_-vinge.open_-time_-tue”、“@selected_-vinge.open_-time_-wed”等。正如您所看到的,我在通用变量名“@selected_-vinge.open_-time_-time”后面加上了一周中的一天,以便获得动态生成的变量的值

我没有得到变量所表示的值(如2:00PM),而是一直得到文字结果:“@selected\u-vention.open\u-time\u-wed”

是否有一种方法可以用来获取动态生成的变量的值?

这更像是一种方法,但肯定是可能的。您可以这样访问变量:

@selected_venue.send(:"open_time_#{Time.now.strftime('%a').downcase}")

这样说,在这样的情况下,我首先考虑是否可以用哈希替换动态变量——如果<代码> OpenStime可以是哈希,如果你可以在上面设置<代码>:WEW <代码>,我个人会发现它更简洁。(当然,我不知道这里的全部情况-如果您在场馆表中有七个变量用于每天的开放时间,这个解决方案是有意义的)。

这更像是一个问题,但肯定是有可能的。您可以访问这样的变量:

@selected_venue.send(:"open_time_#{Time.now.strftime('%a').downcase}")

这样说,在这样的情况下,我首先考虑是否可以用哈希替换动态变量——如果<代码> OpenStime可以是哈希,如果你可以在上面设置<代码>:WEW <代码>,我个人会发现它更简洁。(当然,我不知道这里的全部情况-如果您在每日开放时间的场馆表中有七个变量,这个解决方案是有意义的)。

Cleaner将逻辑移动到助手,例如:

# in a helper
def open_time
  var = "open_time_" + Time.now.strftime('%a').downcase
  @selected_venue.send(var)
end

# in the template
<%= open_time %>
助手中的
#
def打开时间
var=“open\u time”+time.now.strftime(“%a”).downcase
@所选地点。发送(var)
结束
#在模板中

我同意@Bubbles的观点,在
open\u time
中有一个散列或数组这样的集合比这样的元程序要好。

Cleaner将逻辑移动到帮助程序,例如:

# in a helper
def open_time
  var = "open_time_" + Time.now.strftime('%a').downcase
  @selected_venue.send(var)
end

# in the template
<%= open_time %>
助手中的
#
def打开时间
var=“open\u time”+time.now.strftime(“%a”).downcase
@所选地点。发送(var)
结束
#在模板中

我同意@Bubbles的观点,在
open\u time
中有一个散列或数组这样的集合比这样的元程序要好。

请注意,如果
@selected\u vention
是一个ActiveRecord对象(并且
open\u time\u mon
是该对象的一个属性),您可以像散列一样使用它:

@selected_venue["open_time_#{Time.now.strftime('%a').downcase}"]
否则,正如其他人所说,您需要使用send:

@selected_venue.send("open_time_#{Time.now.strftime('%a').downcase}")

请注意,如果
@selected\u-vinge
是一个ActiveRecord对象(而
open\u-time\u-mon
是该对象的一个属性),则可以像散列一样使用它:

@selected_venue["open_time_#{Time.now.strftime('%a').downcase}"]
否则,正如其他人所说,您需要使用send:

@selected_venue.send("open_time_#{Time.now.strftime('%a').downcase}")

谢谢,Bubbles。你的答案很有效,但我还是同意Mori下面的答案,因为它允许我在helper中插入一些额外的代码。干杯!很公平;提取代码有很多话要说。谢谢,Bubbles。你的答案很有效,但我同意Mori下面的答案,因为它允许我在hel中插入一些额外的代码per.干杯!很公平;关于提取代码有很多话要说。Mori-我最终将open_time方法放入了一个helper中,效果很好;但是,我现在通过AJAX在我的控制器中调用show action,应用程序不再识别open_time方法。您对如何访问helper methods v有什么建议吗ia AJAX?@Vee,helper方法应该具有相同的作用域,无论是否由AJAX调用。如果AJAX使用不同的控制器,您需要确保helper在那里也是可见的,例如,通过指令。您说得对,Mori!在修改了大量代码后,我忘记了重命名helper中的实例变量。同样,这是有效的非常有魅力。谢谢!Mori-我最终将open_time方法放入助手中,效果非常好;但是,我现在通过AJAX在我的控制器中调用show操作,应用程序不再识别open_time方法。您对如何通过AJAX访问助手方法有何建议?@Vee,助手方法应该具有相同的功能范围,无论是否由AJAX调用。如果AJAX使用不同的控制器,您需要确保助手在那里也是可见的,例如,通过指令。您说得对,Mori!在修改了大量代码后,我忘了重命名助手中的实例变量。同样,它非常有效。谢谢!