используя в качестве твита последующую роль - PullRequest
0 голосов
/ 21 октября 2018

я пытаюсь добавить актеров в мое приложение, чтобы пользователь мог следить за другими пользователями, и на странице индекса твитов отображаются только твиты текущих пользователей и твиты тех, за кем они следят.В настоящее время у меня есть кнопка «подписаться» на странице показа пользователя, но я ожидаю, что она изменится на «подписку», но ничего не изменится.Я посмотрел на другие вопросы и документацию, но не повезло.спасибо.

Пользователи показывают представление:

<% if current_user.following?(@user) %>
  <%= button_to "Following", {action: "unfollow", id: @user.id}, method: "post", class: "btn btn-secondary btn_unfollow", remote: true %>
<% else current_user != @user %>
  <%= button_to "Follow", {action: "follow", id: @user.id}, method: "post", class: "btn btn-primary btn_follow", remote: true %>
<% end %>

Пользователи контроллер:

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
    @tweets = @user.tweets.order('created_at DESC')
    authorize @user
  end

  def follow
    @current_user.follow(@user)
    @follow = Follow.find_by(follower: @current_user, followable: @user)
     # @user = User.find(params[:id])
     # current_user.follow(@user)
     #  current_user.follow(@user)
     #  redirect to user_path(@user)
    # respond_to :js
  end

  def unfollow
    @user = User.find(params[:id])
    @current_user.stop_following(@user)
    # current_user.stop_following(@user)
    # redirect_to user_path(@user)
    # respond_to :js
  end
end

Маршруты:

resources :users do
  member do
    get :follow
    get :unfollow
  end
end

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Попробуйте удалить часть remote: true с вашего поля зрения:

<% if current_user.following?(@user) %>
  <%= button_to "Following", {action: "unfollow", id: @user.id}, method: "post", class: "btn btn-secondary btn_unfollow" %>
<% elsif current_user != @user %>
  <%= button_to "Follow", {action: "follow", id: @user.id}, method: "post", class: "btn btn-primary btn_follow" %>
<% end %>

Добавить метод post для действий follow и unfollow для routes.rb:

resources :users do
  member do
    post :follow
    post :unfollow
  end
end

и попробуйте current_user вместо @current_user в вашем UsersController, если вы используете Devise в качестве решения для аутентификации:

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
    @tweets = @user.tweets.order('created_at DESC')
    authorize @user
  end

  def follow
    current_user.follow(@user)
    @follow = Follow.find_by(follower: current_user, followable: @user)
     # @user = User.find(params[:id])
     # current_user.follow(@user)
     #  current_user.follow(@user)
     #  redirect to user_path(@user)
    # respond_to :js
  end

  def unfollow
    @user = User.find(params[:id])
    current_user.stop_following(@user)
    # current_user.stop_following(@user)
    # redirect_to user_path(@user)
    # respond_to :js
  end
end
0 голосов
/ 21 октября 2018

Вы добавляете ответ ajax, выполняя remote:true.Вам необходимо добавить follow.js.erb и unfollow.js.erb представление, которое будет перерисовывать ваш фрагмент.

...