在引导工具提示中引用控制器变量

时间:2014-01-03 08:33:00

标签: ruby twitter-bootstrap twitter

如果推文包含属于当前用户phrase的任何blockedshow,则会收到redacted div。我希望工具提示告诉用户推文包含的特定短语,当它悬停在推文上时。现在我正在使用@phrases并且它不起作用。有什么想法吗?

查看

<% if is_redacted? tweet %>
    <!-- Tweet contains at least one blocked phrase. -->
    <a href="https://www.twitter.com/#{tweet.user.screen_name}" 
       data-toggle="tooltip" title="This tweet contains the phrase:<%=@phrases%> "> 
        <%= check_if_redacted(tweet.text)%>
    </a>
<% end %>

控制器

  class TwitterController < ApplicationController
  def index
  end

  def login
  end

  def tweet
    text = params[:my_tweet]
     Client.update(text) unless text==nil

end

  private

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

  helper_method :is_redacted?

end

1 个答案:

答案 0 :(得分:0)

实例变量@phrases在辅助方法中定义。我不认为它在视图范围内可见。您需要在控制器操作中启动。如果这是在索引中:

def index
  @phrases = current_user.blockedshows.map(&:phrases).flatten.map(&:text)
end

我对你的tweet方法感到有些困惑。这是一个控制器动作还是一个辅助方法。我看起来像一个辅助方法,因为你在视图中引用它(除非这里没有更多的代码)。我也会把tweet放在一个实例变量中,甚至可能是is_redacted。像这样的东西:

def index
  @phrases = current_user.blockedshows.map(&:phrases).flatten.map(&:text)
  @tweet = Client.update(params[:my_tweet]) unless text==nil
  @isredacted = @phrases.any? { |phrase| tweet.text.include? phrase }
end

然后在视图中使用它:

<% if @isredacted %>
  <!-- Tweet contains at least one blocked phrase. -->
  <a href="https://www.twitter.com/#{@tweet.user.screen_name}" 
    data-toggle="tooltip" title="This tweet contains the phrase:<%=@phrases%> "> 
    <%= check_if_redacted(@tweet.text)%>
  </a>
<% end %>