0

質問の値の数に応じて編集ページをフォーマットするコードが少しあります。

  <% (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 %>

それは非常に厄介で拡張できないように見えます。caseステートメントをvalue1..nクラス変数ごとにcaseを必要としないものに置き換えるにはどうすればよいですか?

4

3 に答える 3

1

回答値をハッシュに入れると、1つのステートメントで値を取得できます。これをヘルパーメソッドに入れることができます。

values = {1 => 'my value 1', 2 => 'my value'}
answer_value = values[qvalue]
于 2012-05-11T07:27:03.937 に答える
0

私は古いスタンバイの動的コード、つまりevalで成功しています。

<% answer_value = eval( '@answer.value' + qvalue.to_s ) %>

阿部が指摘したように、もっと正確に言えば

<% answer_value = @answer.send( 'value'+qvalue.to_s) %>

何らかの理由で不明ですが、これは機能しません。

<% answer_value = @answer.send( 'value#{qvalue}' ) %>
于 2012-05-12T00:28:55.773 に答える
0

適切なORM(DataMapperなど)を使用している場合は、データベースフィールドのマップ先を指定できるはずです。それ以外の場合、現在の状況の簡単な修正は次のようになります。

class Answer
  def value(i)
    self.send("value#{i}")
  end
end
于 2012-05-12T01:07:39.810 に答える