我在我的应用程序中设置了一个多态喜欢的用户,用户可以在其中喜欢其他模型,例如书,章,文章...现在,我尝试通过允许用户像其他用户一样来进一步扩展它,但我正在运行出现此错误:
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.rbhas_many :likes
到
has_many :likes, as: :item, dependent: :destroy
这是我收到错误消息
Validation failed: User must exist
指向
likes.where(item: item).create!
在用户中。rb
答案 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
是单面的。