星级评分渲染而不是简单的select_tag下拉渲染

时间:2014-06-25 17:34:20

标签: css ruby-on-rails

我有这个范围:

<span class="rating">
  <tr>
    <td>Quality</td>
    <td><%= select_tag :quality,  options_for_select(["1", "2", "3", "4", "5"]), { multiple: false } %></td>
  </tr>
  <tr>
    <td>Cost</td>
    <td><%= select_tag :cost,  options_for_select(["1", "2", "3", "4", "5"]), { multiple: false } %></td>
  </tr>
  <tr>
    <td>Time</td>
    <td><%= select_tag :time,  options_for_select(["1", "2", "3", "4", "5"]), { multiple: false } %></td>
  </tr>
  <tr>
    <td>Experience</td>
    <td><%= select_tag :experience,  options_for_select(["1", "2", "3", "4", "5"]), { :multiple => false } %></td>
  </tr>
  <tr>
    <td>Communication</td>
    <td><%= select_tag :communication,  options_for_select(["1", "2", "3", "4", "5"]), { :multiple => false } %></td>
  </tr>
</span>

用于设置用户的某些评级参数。它只是在下拉列表中呈现,这是不好的。我决定使用基于星级的评分,并通过一些搜索找到nice article

我确实正确放置了所有CSS,我可以看到明星应该显示并呈现为:

<span class="rating">
<input type="radio" class="rating-input"
    id="rating-input-1-5" name="rating-input-1">
<label for="rating-input-1-5" class="rating-star"></label>
<input type="radio" class="rating-input"
    id="rating-input-1-4" name="rating-input-1">
<label for="rating-input-1-4" class="rating-star"></label>
<input type="radio" class="rating-input"
    id="rating-input-1-3" name="rating-input-1">
<label for="rating-input-1-3" class="rating-star"></label>
<input type="radio" class="rating-input"
    id="rating-input-1-2" name="rating-input-1">
<label for="rating-input-1-2" class="rating-star"></label>
<input type="radio" class="rating-input"
    id="rating-input-1-1" name="rating-input-1">
<label for="rating-input-1-1" class="rating-star"></label>
</span>

我尝试了几种方法,但我不确定如何将其改为:<%= select_tag :quality, options_for_select(["1", "2", "3", "4", "5"]), { multiple: false } %>进入收音机,星星,输入。

我最接近的是:

    <td>
      <% [ '1', '2', '3', '4', '5' ].each do |quality| %>
        <br><%= radio_button_tag 'quality', quality, @quality == quality, class: "rating-input" %>
        <%= label_tag "rating_#{quality}", quality.humanize %>
        <label for="rating-input-1-5" class="rating-star"></label>
      <% end %>
    </td> 

任何指导都会非常感激。

1 个答案:

答案 0 :(得分:1)

尝试以下方法:

1..5.each do |rate|
  radio_button_tag 'quality', quality, resource.quality == quality, class: 'rating-input', id: "rating_quality_#{rate}"
  label_tag "rating_quality_#{rate}"
end

为了便于阅读,我没有包含<%%>标记。