【发布时间】:2016-05-09 12:24:54
【问题描述】:
我在文件视图名称中有代码:_result.html.erb,此文件是从文件 show.html.erb 呈现的,两个文件都在一个文件夹中
File _result.html.erb
<% if @lesson.answers.at(f.index).is_correct %>
<% if @lesson.answers.at(f.index).id == answer.id %>
<li class="text-success">
<%= f.radio_button :answer_id, answer.id, disabled: true %>
<%= answer.content %>
</li>
<% else %>
<li>
<%= f.radio_button :answer_id, answer.id, disabled: true %>
<%= answer.content %>
</li>
<% end %>
<% else %>
<% if @lesson.answers.at(f.index).id == answer.id %>
<li class="text-danger">
<%= f.radio_button :answer_id, answer.id, disabled: true %>
<%= answer.content %>
</li>
<% else %>
<li>
<%= f.radio_button :answer_id, answer.id, disabled: true %>
<%= answer.content %>
</li>
<% end %>
<% end %>
我想改进文件 _result.html.erb 中的这段代码,使其更短,请帮助我!!!
File show.html
<% provide :title, t("start_lesson") %>
<h1><%= @course.name %></h1>
<h2><%= @course.description %></h2>
<h3><%= t "title_question" %></h3>
<% if @lesson.finished.present? %>
<h4>
<%= t "score" %>:
<%= @lesson.results.is_correct_answers.count %> /
<%= @lesson.words.count %>
</h4>
<% end %>
<%= form_for [@course, @lesson] do |f| %>
<%= f.fields_for :results do |builder| %>
<ul class="list-unstyled">
<li>
<%= "#{builder.index + 1}." %>
<%= @words.at(builder.index).content %>
</li>
<ul class="list-unstyled">
<% @words.at(builder.index).answers.each do |answer| %>
<% if @lesson.finished.nil? %>
<li>
<%= answer.content %>
<%= builder.radio_button :answer_id, answer.id %>
<%= builder.hidden_field :word_id, value: answer.word.id %>
</li>
<% else %>
<%= render "result", f: builder, answer: answer %>
<% end %>
<% end %>
</ul>
</ul>
<% end %>
<% if @lesson.finished.nil? %>
<%= f.submit t("submit"), class: "btn btn-primary" %>
<% end %>
<% end %>
【问题讨论】:
-
当你说改进代码时,你到底需要什么?
-
在
_results.html.erb中,您将整个<li>...</li>块重复四次,即使只有类发生了变化。 -
小改进:您可以使用
<ol>,而不是手动渲染索引 (<%= "#{builder.index + 1}." %>)。 -
你能详细说明你的模型之间的关系吗?例如:一门课有很多课,一课有很多答案,一个答案有一个结果?等等,还有什么是@words?
标签: ruby-on-rails ruby views