1

私の html.erb ファイルでは:

<% @user.relationships.each do |relationship| %>
  <% if relationship.status == "requested" %>
    <p>You have friend requests from: </p> 
    <%= User.find(relationship.followed_id).name %>

問題は、表示したいだけです

次から友達リクエストがあります:

いずれかの一致がある場合は 1 回ですが、現在は status == "request" のたびに実行されます。

4

2 に答える 2

2

すべてのオブジェクトをロードしているように見えるので、これを ruby​​ で行います。それ以外の場合は、スコープを使用して行う必要があります。

あなたのモデルでは:

def requested?
  status == 'requested'
end

コントローラーで:

@relationships = @user.relationships.includes(:followed)
@requested_relationships = @relationships.select &:requested?

あなたの見解では:

<% if @requested_relationships.any? %>
  <p>You have friend requests from: </p> 
    <% @requested_relationships.each do |relationship| %>
       <%= relationship.followed.name %>

n+1 クエリを防止するように編集

于 2013-10-06T06:19:18.853 に答える
1

私は次のようなことを提案します:

<% requested = @user.relationships.where(status: 'requested') %>
<% if requested.any? %>
  <p>You have friend requests from: </p> 
  <% requested.each do |relationship| %>
    <%= User.find(relationship.followed_id).name %>
于 2013-10-06T06:17:23.050 に答える