在我的rails应用程序中,我有一个对象的索引,我正在调用Lessons。如果用户将课程标记为已完成,则会将其记录在名为Completions的连接表中,并将completed_step布尔值设置为true。
在课程的show动作中,我能够插入条件语句来修改"完成课程的按钮。"
这个按钮逻辑可以正常工作:
<% if current_user.completed_steps.include? @lesson %>
<%= button_to "This Lesson is Completed", @lesson.next, class: "btn btn-success btn-lg", :method => :get %>
<% else %>
<%= button_to "Mark this Lesson as Complete", complete_lesson_path, class: "btn btn-warning btn-lg" %>
<% end %>
我的问题是如何在索引视图中加入这种类型的逻辑检查?
我希望每个课程的链接显示在Bootstrap面板中,我想根据每个课程的用户是否completed_step来更改面板的颜色。
我尝试将面板包装在同一个声明中并且它不起作用,即使用户已完成这些课程,它也会保持红色。
这是我的尝试:
<% @lessons.each do |lesson| %>
<% if current_user.completed_steps.include? @lesson %>
<div class="panel panel-success">
<% else %>
<div class="panel panel-danger">
<% end %>
<div class="panel-heading">
<h3 class="panel-title">
<%= link_to(lesson) do %>
<strong><%= lesson.title %></strong>
<% end %>
</h3>
</div>
<div class="panel-body">
<td><%= lesson.summary %></td>
</div>
</div>
我做错了什么或为什么这不起作用?
答案 0 :(得分:2)
请更改您的脚本
<% @lessons.each do |lesson| %>
<% if current_user.completed_steps.include? lesson %>
<div class="panel panel-success">
<% else %>
<div class="panel panel-danger">
<% end %>
<div class="panel-heading">
<h3 class="panel-title">
<%= link_to(lesson) do %>
<strong><%= lesson.title %></strong>
<% end %>
</h3>
</div>
<div class="panel-body">
<td><%= lesson.summary %></td>
</div>
</div>
答案 1 :(得分:2)
你需要传递你在循环中给出的同一个对象。
'\0'
答案 2 :(得分:1)
@Pramod Gupta是对的。另外,请考虑使用Presenters来处理用于装饰视图的此类逻辑。