【发布时间】:2019-01-21 13:52:34
【问题描述】:
我使用 ruby '2.5.0'、rails、'5.2.2'、mongoid '7.0.2' 并设计
我尝试添加跟随功能,但在 mongoid '7.0.2' 中出现此错误
消息:不明确的关系
@options={:class_name=>"用户"}, @extension=nil, @module_path="", @polymorphic=false, @default_foreign_key_field="follower_id", @foreign_key="follower_id",@indexed=false,@class_name="用户", @klass=用户,@validate=false>,
@options={:class_name=>"用户"}, @extension=nil, @module_path="", @polymorphic=false, @default_foreign_key_field="followed_id", @foreign_key="followed_id", @indexed=false, @class_name="用户", @klass=User, @validate=false> 在关系上定义。摘要:什么时候 Mongoid 试图在内存中设置一个关系的逆文档, 它需要知道它属于哪个关系。设置时 :relationships,Mongoid 在 User 类上查找匹配项 关系,但发现了可能匹配的倍数:
@options={:class_name=>"用户"}, @extension=nil, @module_path="", @polymorphic=false, @default_foreign_key_field="follower_id", @foreign_key="follower_id",@indexed=false,@class_name="用户", @klass=用户,@validate=false>,
@options={:class_name=>"用户"}, @extension=nil, @module_path="", @polymorphic=false, @default_foreign_key_field="followed_id", @foreign_key="followed_id", @indexed=false, @class_name="用户", @klass=用户,@validate=false>。解决方案:关于 :relationships 用户的关系,您必须添加一个 :inverse_of 选项来指定 与关系相反的确切关系 :关系。
用户.rb
class User
include Mongoid::Document
field :email, type: String, default: ""
has_many :relationships, foreign_key: "follower_id", dependent: :destroy
has_many :reverse_relationships, foreign_key: "followed_id", class_name: "Relationship", dependent: :destroy
def retrieve_users_for_ids(user_ids)
users = []
User.in(id: user_ids).each do |user|
users << user
end
users
end
def followed_users
user_ids = []
relationships.each do |relationship|
user_ids << relationship.followed_id
end
return retrieve_users_for_ids(user_ids)
end
def followers
user_ids = []
reverse_relationships.each do |relationship|
user_ids << relationship.follower_id
end
return retrieve_users_for_ids(user_ids)
end
def following?(other_user)
relationships.where(followed_id: other_user.id).first
end
def follow!(other_user)
relationships.create!(followed_id: other_user.id)
end
def unfollow!(other_user)
relationships.where(followed_id: other_user.id).first.destroy
end
end
_follow.html.erb
<%= form_for(current_user.relationships.build(followed_id: @user.id),
remote: true) do |f| %>
<%= f.hidden_field :followed_id %>
<%= f.submit 'Follow', data: {disable_with: 'Follow...'}, class: 'btn btn-d' %>
<% end %>
【问题讨论】:
标签: ruby-on-rails mongoid