使用此设置,我如何喜欢用户模型?

时间:2019-05-17 20:14:49

标签: ruby-on-rails ruby

我在我的应用程序中设置了一个多态喜欢的用户,用户可以在其中喜欢其他模型,例如书,章,文章...现在,我尝试通过允许用户像其他用户一样来进一步扩展它,但我正在运行出现此错误:

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!

在用户中。rb

1 个答案:

答案 0 :(得分:0)

保留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是单面的。