交叉口'&'在视图中输出结果

时间:2015-09-27 02:45:52

标签: ruby-on-rails

我有一个奇怪的问题。我在网站上有友谊系统,我正在寻找共同的朋友。为了做到这一点,我使用了交集,但它在视图中输出,这根本没有意义。

我帮助了我。

  def display_connections_buttons(friend_id)
    if(@profile.id == current_user.id) || (@profile.username == current_user.username)

    else
      common_friends = @profile.friends & current_user.friends
      common_friends.each do |friend|
        if friend.id == friend_id
          render 'profiles/connections_buttons'
        end
      end
    end
  end

据普通朋友说,我打算渲染按钮。但是我在屏幕上输出了这个输出:

#<User id: 9, first_name: "REMOVED", last_name: "REMOVED", email: "REMOVED", password_digest: "$2a$10$xkaCxStsc70BYpJN9yulQOuDyXOBJEIEaW817YDst9t...", authorization_token: "REMOVED", username: "", school: "REMOVED", program: nil, information: nil, website: nil, courses: nil, groups: nil, picture_id: nil, created_at: "2015-09-24 19:51:52", updated_at: "2015-09-24 19:51:52">]

我用'REMOVED'替换了一些数据。我不希望它出现。

我删除了一些代码来了解输出的来源,以及当我删除'common_friends = @ profile.friends&amp; current_user.friends的输出从屏幕上消失。为什么你认为这段代码会输出?

谢谢。

查看档案

<span class="list-group-item title">Connections</span>

<div class="connections clearfix">
  <% @profile.friends.each do |friend| %>
      <div class="connection pull-left">
        <div class="content pull-left">
          <div class="connection-thumbnail pull-left">
            <%= image_tag friend.picture_id.blank? ? 'default.png' : friend.picture_id, :class => 'frame' %>
          </div>
          <div class="connection-name">
            <%= link_to friend.first_name + ' ' + friend.last_name, profile_path(friend.id) %>
          </div>
          <div class="connection-information">
            <div class="information"><%= friend.website %></div>
            <div class="information"><%= friend.colour %></div>
          </div>
        </div>
        <div class="connection-dropdown">
          <%= display_connections_buttons(friend.id) %>
        </div>
      </div>
  <% end %>
</div>

在我尝试使用@Swards之后,我将渲染的输出作为文本。不是变量。

<div class="dropdown pull-right"> <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"> Options <span class="caret"></span> </button> <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> <li><a href="#">Send Message</a></li> <li role="separator" class="divider"></li> <li><a href="#">Disconnect</a></li> </ul> </div>

1 个答案:

答案 0 :(得分:1)

我认为这是因为这段代码......

  common_friends = @profile.friends & current_user.friends
  common_friends.each do |friend|
    if friend.id == friend_id
      render 'profiles/connections_buttons'
    end
  end

是在方法中运行的最后一个,并返回到视图并呈现为字符串。渲染没有按照你的想法进行,结果就是丢失了。相反,将其设置为变量并将其返回

  output = ""
  common_friends = @profile.friends & current_user.friends
  common_friends.each do |friend|
    if friend.id == friend_id
      output += render('profiles/connections_buttons')
    end
  end
  return output

注意 - 这有望让你看到它是如何工作的,但你可能想重构并从视图中进行渲染。在模型上放置一个方法以返回常见的朋友并在视图中呈现它们。最后你根本不会使用这个助手。