ruby on rails if 模板语句

ruby on rails if statement on template

<% @videos.each_with_index do |video, index| %>
  <% if(@video.videotype = "vimeo") %>
    <iframe width="720" height="480" src="//player.vimeo.com/video/<%=video.videourl  %>"    frameborder="0" id="player2" ></iframe>                      
  <% else %>
    <% if(@video.videotype = "youtube") %>
      <iframe width="720" height="480" src="//www.youtube.com/embed/<%=video.videourl %>" frameborder="0" id="player1"></iframe>
    <% end %>
  <% end %>
<% end %>

if else 这有什么问题?我所有的视频都显示为 vimeo 播放器,但视频类型在数据库中没问题...

="vimeo" 分配给 @video.videotype,并且由于 "vimeo" 为真,因此第一个 if 触发。您需要 ==,比较运算符。

我发表了一些评论:

实施这些,将产生以下代码:

<% @videos.each_with_index do |video, index| %>
  <% if @video.videotype == "vimeo" %>
    <iframe width="720" height="480" src="//player.vimeo.com/video/<%= video.videourl %>"    frameborder="0" id="player2" ></iframe>
  <% elsif @video.videotype == "youtube" %>
    <iframe width="720" height="480" src="//www.youtube.com/embed/<%= video.videourl %>" frameborder="0" id="player1"></iframe>
  <% end %>
<% end %>

我还让你的间距和缩进更加连贯。这应该会产生更具可读性的代码。

您使用了赋值运算符 (=) 而不是相等运算符 (==)。

<% @videos.each_with_index do |video, index| %>
   <%if(@video.videotype == "vimeo") %>
       <iframe width="720" height="480" src="//player.vimeo.com/video/<%=video.videourl  %>"    frameborder="0" id="player2" ></iframe>
   <% else %>
      <% if(@video.videotype == "youtube") %>
        <iframe width="720" height="480" src="//www.youtube.com/embed/<%=video.videourl %>" frameborder="0" id="player1"></iframe>
      <% end %>
   <% end %>
<% end %>
  1. "=" 是一个赋值运算符,不要在 Ifs 中使用它,它会将所有内容都赋值给 "vimeo",从而弄乱这里的逻辑。使用“==”进行比较。
  2. 您可以使用 elsif 避免此类嵌套条件
  3. 在此特定情况下,视图中的 if 语句不需要括号

        <% @videos.each_with_index do |video, index| %>
        <%if @video.videotype == "vimeo" %>
          <!-- iframe for vimeo -->
        <% elsif  @video.videotype == "youtube" %>
          <!-- iframe for youtube -->
         <% end %>
        <% end %>
    

    祝你好运,希望能成功