У меня есть пользовательская модель, которая может создавать отношения, чтобы иметь последователей и следовать за другими, и все, что я узнал из руководства по рельсам, работало замечательно.Во-первых, я пытаюсь перейти к следующему шагу, добавив возможность видеть последователей других людей и иметь возможность нажимать кнопку «следовать / следовать».Очевидно, что код, который находится на своем месте, размещает все, где он должен быть (небольшой профиль подписчиков, кнопки и т. Д.), Но когда я нажимаю на кнопку, он только следует за собой или лишает себя способности не относиться к конкретному человеку, которому я решаю следоватья могу это исправить?Любая помощь очень ценится!
Это код для следующей страницы и страницы подписчиков:
<div id='ContentContainer'>
<div class='ContentLeft'>
<% if @users.any? %>
<%= render @users %>
<%= will_paginate @users %>
<% end %>
</div>
</div>
Это приводит к отображению шаблона пользователя, который включает в себя
<% unless current_user?(@user) %>
<div id="follow_form_small">
<% if current_user.followed_users?(@user) %>
<%= render 'unfollow_small' %>
<% else %>
<%= render 'follow_small' %>
<% end %>
</div>
<% end %>
И затем следующие и последующие формы соответственно
<%= form_for current_user.relationships.build(followed_id: @user.id),
remote: true do |f| %>
<div><%= f.hidden_field :followed_id %></div>
<%= f.submit "Follow", :class => 'FollowButton_small' %>
<% end %>
<%= form_for current_user.relationships.find_by_followed_id(@user),
html: { method: :delete },
remote: true do |f| %>
<%= f.submit "Unfollow", :class => 'UnFollowButton_small' %>
<% end %>
Контроллер отношений
class RelationshipsController < ApplicationController
def create
@user = User.find(params[:relationship][:followed_id])
current_user.follow!(@user)
respond_to do |format|
format.html { redirect_to @user }
format.js
end
end
def destroy
@user = Relationship.find(params[:id]).followed
current_user.unfollow!(@user)
respond_to do |format|
format.html { redirect_to @user }
format.js
end
end
end
Модель отношений
class Relationship < ActiveRecord::Base
attr_accessible :followed_id
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
validates :follower_id, presence: true
validates :followed_id, presence: true
end
Модель пользователя Это также было добавлено к ней
def following?(other_user)
relationships.find_by_followed_id(other_user.id)
end
def followed_users?(other_user)
relationships.find_by_followed_id(other_user.id)
end
def follow!(other_user)
relationships.create!(followed_id: other_user.id)
end
def unfollow!(other_user)
relationships.find_by_followed_id(other_user.id).destroy
end
Следуйте форме
<% unless current_user?(@user) %>
<div id="follow_form_small">
<% if current_user.followed_users?(@user) %>
<%= render 'unfollow_small' %>
<% else %>
<%= render 'follow_small' %>
<% end %>
</div>
<% end %>
Текущий пользователь
private
def current_user
@current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
end
helper_method :current_user
Новые правки
class Relationship < ActiveRecord::Base
attr_accessible :followed_id
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
validates :follower_id, presence: true
validates :followed_id, presence: true
validate :not_following_himself
def not_following_himself
errors.add :followed_id,
if followed_id == follower_id
end
end