您如何在Ruby on Rails中内联编写条件三元运算符?

时间:2019-06-24 22:28:07

标签: ruby-on-rails ruby if-statement conditional-statements ternary

我正在尝试比较2个值,并在条件成立时更改其中一个的颜色。 但是我也有一个搜索栏,当我使用Rails将其包装在<%if%>语句中的<%if%>语句中时,我无法访问标签值。

我本来就是这样的代码

 <% if track.user.username == current_user.username%>
   <td class="track_table_current_user">
     <span><%= track.user.username %></span>
   </td>
 <% else %>
   <td class="td-userName"> 
     <span class="track_table_user_name"><%= track.user.username %> </span>
   </td>
 <% end %> 

到目前为止,我的三元组:

<td class="track_table_user_name <% track.user.username == current_user.username ? "this_current_user" : "other_user" %>">
    <%= track.user.username %>
</td>

如果使用<%if%> <%else%>,我将无法访问值的搜索功能:

function trackTableSearch() {
  var input, filter, table, tr, td, i, txtValue;
  input = document.getElementById("trackTableInput");
  filter = input.value.toUpperCase();
  table = document.getElementById("tracksTable");
  tr = table.getElementsByTagName("tr");
  for (i = 0; i < tr.length; i++) {
    tdN  = tr[i].getElementsByClassName("td-trackName")[0];
    tdU = tr[i].getElementsByClassName("track_table_user_name")[0];
    tdR = tr[i].getElementsByClassName("td-trackApproved")[0];
    tdP = tr[i].getElementsByClassName("td-public")[0];
    if ((tdN) || (tdU) || (tdR) || (tdP)) {
      txtValueN  = tdN.textContent  || tdN.innerText;
      txtValueU  = tdU.textContent  || tdU.innerText;
      txtValueA  = tdR.textContent  || tdR.innerText;
      txtValueP  = tdP.textContent  || tdP.innerText;

      if (txtValueN.toUpperCase().indexOf(filter) > -1) {
        tr[i].style.display = "";
      }else if (txtValueU.toUpperCase().indexOf(filter) > -1) {
        tr[i].style.display = "";
      } else if (txtValueA.toUpperCase().indexOf(filter) > -1) {
        tr[i].style.display = "";
      }else if (txtValueP.toUpperCase().indexOf(filter) > -1) {
        tr[i].style.display = "";
      }else{
        tr[i].style.display = "none";
      }
    }
  }

3 个答案:

答案 0 :(得分:2)

您可能想要执行以下操作:

<td class="<%= track.user.username == current_user.username ? "track_table_current_user" : "td-userName" %>">
    <%= track.user.username %>
</td>

请参阅this answer,了解如何使用三元运算符,它在每种语言中的工作原理都差不多。

答案 1 :(得分:1)

在这里我不会使用三元运算符,因为它会使您的模板代码更加难以阅读。相反,我将执行if-else语句。对于非常短的if-else语句,三元运算符确实非常好,但是特别是在呈现的代码中,我们希望减少所有逻辑,而在不可能的情况下,我们希望它易于解析。

这很容易解析:

<% if track.user.username == current_user.username %>
  <td class="track_table_user_name <%= this_current_user %>>
<% else %>
  <td class="track_table_user_name <%= other_user %>>
...

我什至可以在控制器中制作一个@rendered_username变量,因此您不必执行任何这种逻辑。

答案 2 :(得分:0)

我想通了...。我不愿承认这一点,但我忘记了'='符号... uggggg为什么!?!?!

OtherThing

感谢大家的帮助和.inspect,并在控制器中添加了一个变量。

我的最终作品:

<td class="track_table_user_name \
    <% ***(right here)*** track.user.username == current_user.username ? "this_current_user" : "other_user" %>">
     <%= track.user.username %>
    </td>