html - 循环复制内容

标签 html css ruby-on-rails ruby

出于某种原因,下面 else 语句中的推文重复了,我不明白为什么。

如果推文包含该短语,它们将收到经过编辑的 div。如果推文不包含该短语,则它们应该有常规文本。但是,如果推文不包含该短语,则这些推文会出于某种原因出现两次。

这是否与循环的设置方式有关?

<section id="tweets">
 <ul>
<% tweet = @tweets.each do |tweet| %>
@<%= tweet.user.screen_name %>
<%= image_tag(tweet.user.profile_image_url) %>

    <% current_user.blockedshows.each do |blockedshow| %>
        <% blockedshow.phrases.each do |phrase| %> </br>
            <% if tweet.text.include?(phrase.text)%>
                <li><%= link_to check_if_redacted(tweet.text), "https://www.twitter.com/#{tweet.user.screen_name}" %></li>
            <% else %>
                <li><%= link_to tweet.text, "https://www.twitter.com/#{tweet.user.screen_name}" %></li>

        <% end %>
    <% end %>
<% end %>

最佳答案

内部循环对每个 blockedshow 中的每个编辑短语执行一次,这将复制每个短语的推文输出。尝试使用 any?一次检查所有短语的推文,并发出正确的 <div>基于该结果:

<% if current_user.blockedshows.flat_map(&:phrases).flatten.any? { |phrase| tweet.text.include? phrase.text } %>
  <!-- Tweet contains at least one blocked phrase. -->
  <li><%= link_to check_if_redacted(tweet.text), "https://www.twitter.com/#{tweet.user.screen_name}" %></li>
<% else %>
  <!-- Tweet contains no blocked phrases. -->
  <li><%= link_to tweet.text, "https://www.twitter.com/#{tweet.user.screen_name}" %></li>
<% end %>

该测试变得有点困惑,因此这是将功能重构为辅助方法的一个很好的候选者。在这个 View 的助手中:

def is_redacted? tweet
  @phrases ||= current_user.blockedshows.map(&:phrases).flatten.map(&:text)
  @phrases.any? { |phrase| tweet.text.include? phrase }
end

然后更改if在 View 中:

<% if is_redacted? tweet %>

关于html - 循环复制内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20805040/

相关文章:

html - 如何在指定的网格列中定位背景?

jquery - 如何在 jQuery 中创建一个平坦的长阴影范围

html - IE9 & IE10 rem 单位

ruby-on-rails - 为什么这么多 Ruby on Rails 应用程序缺少尾部斜杠?

javascript - 为什么表单上的 'submit' 按钮不断刷新页面,即使表单调用的函数末尾存在 'return false'?

javascript - 获取点击元素的同级元素并removeClass纯javascript或没有指令的 Angular js

jquery - 我激活菜单的 Jquery 函数无法工作

ruby-on-rails - Rails 4嵌套表单问题

mysql - 加载生产数据库模式时出现 rake 错误

html - 幻灯片放映下的下拉菜单