【问题标题】:private method `select' called for "Walt":String为“Walt”调用私有方法“选择”:字符串
【发布时间】:2013-12-24 15:50:46
【问题描述】:

我正在尝试遍历一个将遍历短语的块,并查看推文是否包含它们。如果推文包含这些短语,它们应该收到“已编辑”的 div 类。但是,我不断收到private method select called for "Walt":String 错误。我是新手,请耐心等待我的代码。

查看:

<section id="tweets">
  <ul>
<% tweet = @tweets.each do |tweet| %>
@<%= tweet.user.screen_name %>
<%= image_tag(tweet.user.profile_image_url) %>
  <li><%= link_to tweet.text, "https://www.twitter.com/#{tweet.user.screen_name}=twitter&include_entities=true" %></li>

     <% for blockedshows in current_user.blockedshows %>
        <%= blockedshows.phrases %>
        <% for phrases in blockedshows.phrases %>
            <%= blocked = phrases.text %>
            <%= result = blocked.select do |b| %>
                <%= tweet.include? b %>
            <% end %>

        <% end %>

        <% if result.empty? %>
            <%= tweet %>
        <% else %>
            <%= content_tag(:div, class: 'redacted') {tweet} %>

        <% end %>

    <%end %>

型号

class Phrase < ActiveRecord::Base
  belongs_to :tvshow
  belongs_to :blockedshow

  def select

  end
end

【问题讨论】:

  • select 方法 shell 为 ArrayHash 或每个 Enumerable 调用,而不是在你的情况下为 String 调用。

标签: ruby-on-rails


【解决方案1】:

您的变量blocked 已经包含您要与推文进行比较的文本,并且您正在尝试对其执行select 方法(这是字符串类的私有方法)。

稍微重构你的代码

<% current_user.blockedshows.each do |blockedshow| %>
     <% blockedshow.phrases.each do |phrase| %>
          <% if tweet.text.include? phrase.text %>
               <%= content_tag(:div, class: 'redacted') {tweet} %>
          <% else %>
               <%= tweet %>
          <% end %>
     <% end %>
<% end %>

【讨论】:

  • 谢谢,我使用了重构后的代码,现在得到了undefined method include?对于 #<:tweet id="415568707847716864">` 错误
  • 通过添加 if tweet.text.include 修复?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多