0

自己参照関連付けが機能しています。私の問題は、ユーザー/ショーで、現在のユーザーとの関係に応じて異なるテキストを表示したいということです。

現在、ユーザー=現在のユーザーの場合は何も表示しないように設定しています。ユーザーが現在のユーザーではなく、現在のユーザーと友達ではない場合、ユーザーをフォローするためのリンクを表示したいと考えています。最後に、ユーザーが現在のユーザーではなく、現在のユーザーと既に友達である場合、「友達」というテキストを表示したいと考えています。

友情.rb

belongs_to :user
belongs_to :friend, :class_name => "User"

user.rb

has_many :friendships
has_many :friends, :through => :friendships
has_many :inverse_friendships, :class_name => "Friendship", :foreign_key => "friend_id"
has_many :inverse_friends, :through => :inverse_friendships, :source => :user

ユーザー/番組

<% unless @user == current_user %>
  <%= link_to "Follow", friendships_path(:friend_id => @user), :method => :post %>
<% end %>
4

1 に答える 1

1

まず、ユーザーモデルでメソッドを定義します。このメソッドを使用して、ユーザーが別のユーザーと友達であるかどうかを判断できます。これは次のようになります。

class User < ActiveRecord::Base
  def friends_with?(other_user)
    # Get the list of a user's friends and check if any of them have the same ID
    # as the passed in user. This will return true or false depending.
    friends.where(id: other_user.id).any?
  end
end

次に、ビューでそれを使用して、現在のユーザーが特定のユーザーと友達であるかどうかを確認できます。

<% unless @user == current_user %>
  <% if current_user.friends_with?(@user) %>
    <span>Friends</span>
  <% else %>
    <%= link_to "Follow", friendships_path(:friend_id => @user), :method => :post %>
  <% end %>
<% end %>
于 2013-02-14T15:32:44.680 に答える