我想在局部变量中使用一个变量来更改迭代结果。为了说明这一点,让我们以一个更明确的例子为例。
我的变量为@cat = 2
我想运行此迭代:
Post.where(cat#{@cat}: true).each do |post|
女巫应该这样:
Post.where(cat2: true).each do |post|
但是我不知道该怎么办。有什么想法吗?
答案 0 :(得分:2)
在这种情况下,cat2
不是“变量”,而是符号/字符串,这使它更容易实现。这样应该可以正常工作:
Post.where("cat#{@cat}" => true).each do |post|
但是,在一般情况下,生成这样的变量名是一个非常糟糕的主意。这表明您可能为作业选择了错误的数据结构。
答案 1 :(得分:2)
您可以使用字符串插值来实现此目的。检查以下示例:
@variable = 'column'
Post.where("post_#{@variable}": true).each {|x| puts x.inspect}
答案 2 :(得分:1)
尝试此代码,欢迎提出建议
@cat = 2
Post.where(:"cat#{@cat}" => true).each do |post|