Ruby每个循环x到变量替换

时间:2012-09-01 20:19:02

标签: ruby variables loops each variable-subsitution

<% @parts.each do|x| %>


<% @bbb = Relation.where(part: "#{x}") %>
<%= **@"#{x}"** = @bbb.collect {|x| x.car} %>

<% end %>

我正在尝试将第3行中的变量设置为x部分值@“#{x}”。我找不到合适的语法。我知道send(x)和x.to_sym。但我需要知道如何在每个循环中将x设置为@variable with @。谢谢!

1 个答案:

答案 0 :(得分:2)

所以你正在寻找instance_variable_set

instance_variable_set "@#{x}", @bbb.collect { |x| x.car }

但这可能不是解决这个问题的最好方法。如果没有看到使用它的代码,很难说,但可能会考虑将结果放入哈希:result[x] = @bbb.collect { |x| x.car }

另请注意,"#{x}"x.to_s

相同

此外,最好避免直接在视图中查询模型(假设您在此处执行Rails,因为您似乎使用ActiveRecord),因为它将表示与代码混合(您不能将它们作为单独的部分。它有一种变得非常丑陋的倾向,它将你的观点与你最初的一个用例结合起来(即使它应该呈现相同的视图,也不能在同一视图中呈现不同的数据)。考虑将此代码移动到您的控制器中(甚至是其他一些负责管理查询此数据的对象,让您的控制器只负责处理请求。