Как мне понравиться модель пользователя с этой настройкой? - PullRequest
0 голосов
/ 17 мая 2019

Я настроил полиморфную симпатию в моем приложении, где пользователю могут понравиться другие модели, например, книга, глава, статья ... Теперь я попытался продвинуться немного дальше, позволив пользователю стать другим пользователем, но я запускаюна эту ошибку:

Validation failed: User must exist

, указывающая на

likes.where(item: item).create!

Это моя первоначальная настройка для симпатии других моделей, кроме модели пользователя

like.rb

belongs_to :user
belongs_to :item, polymorphic: true

user.rb

has_many :likes, dependent: :destroy

def toggle_like!(item)
    if like = likes.where(item: item).first
      like.destroy
    else
      likes.where(item: item).create!
    end
end

def likes?(item)
    likes.where(item: item).exists?
end

likes_controller.rb

class LikesController < ApplicationController
    before_action :authenticate_user!

    def toggle
        if params[:book_id]
            item = Book.friendly.find(params[:book_id])
        elsif params[:user_id]
            item = User.find_by(username: params[:username])
        end

        current_user.toggle_like!(item)
        redirect_back(fallback_location: root_path)
    end
end

book.rb

has_many :likes, as: :item, dependent: :destroy

Чтобы пользователю понравился другой пользователь, яизменил user.rb с

has_many :likes

на

has_many :likes, as: :item, dependent: :destroy

Это когда я получаю ошибку

Validation failed: User must exist

, указывающую на

likes.where(item: item).create!

в user.rb

1 Ответ

0 голосов
/ 18 мая 2019

Сохранить has_many :likes, dependent: :destroy, а также добавить has_many :received_likes, as: :item, class_name: "Like", dependent: :destroy.Я думаю, что это исправит.Потому что когда вы ставите User has_many: :likes, as: :item и удаляете User has_many: :likes, это означает, что ассоциация Like belongs_to :user была односторонней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...