我有一些代码可以根据问题的值来格式化编辑页面。
<% (1..@question.qvalues_count.to_i).each do |qvalue| %>
<% case qvalue
when 1
answer_value = @answer.value1
when 2
answer_value = @answer.value2
when 3
answer_value = @answer.value3
when 4
answer_value = @answer.value4
when 5
answer_value = @answer.value5
end %>
<label for="answer[value<%=qvalue%>]" class="fieldLabel" >Value<%=qvalue%></label>
<input type="text" id="answer[value<%=qvalue%>]" name="answer[value<%=qvalue%>]"
value="<%=answer_value%>"
/>
<% end %>
看起来非常混乱,无法扩展。如何用不需要每个value1..n类变量的情况替换case语句?
答案 0 :(得分:1)
将答案值放在哈希中,然后您可以使用一个语句获取值。你可以把它放在辅助方法中。
values = {1 => 'my value 1', 2 => 'my value'}
answer_value = values[qvalue]
答案 1 :(得分:0)
我在旧动态代码方面取得了成功,即:eval。
<% answer_value = eval( '@answer.value' + qvalue.to_s ) %>
或更准确地说,如Abe所指出的
<% answer_value = @answer.send( 'value'+qvalue.to_s) %>
由于某些原因未知,这不起作用。
<% answer_value = @answer.send( 'value#{qvalue}' ) %>
答案 2 :(得分:0)
如果您正在使用体面的ORM(例如DataMapper),您应该能够指定数据库字段映射到的内容。否则,对您当前情况的简单修复可能是这样的:
class Answer
def value(i)
self.send("value#{i}")
end
end