对象索引页面上的Rails条件语句

时间:2016-07-10 14:57:03

标签: ruby-on-rails twitter-bootstrap if-statement

在我的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>

我做错了什么或为什么这不起作用?

3 个答案:

答案 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来处理用于装饰视图的此类逻辑。