我的Rails应用程序中有一个友谊类。我使用has_and_belongs_to_many
关联进行连接Users
。我的模特:
class User < ActiveRecord::Base
has_and_belongs_to_many :friends,
class_name: "User",
join_table: :friends,
foreign_key: "user_id",
association_foreign_key: "friend_id"
end
class Friend < ActiveRecord::Base
enum status: [:requested, :received ,:accepted]
belongs_to :user
end
我尝试与status: :accepted
的朋友联系,但Rails使用User
模型搜索此条件:
@friends = @user.friends.where(status: :accepted)
ERROR: column users.status does not exist
LINE 1: ...s"."friend_id" WHERE "friends"."user_id" = $1 AND "users"."s...
: SELECT "users".* FROM "users" INNER JOIN "friends" ON "users"."id" = "friends"."friend_id" WHERE "friends"."user_id" = $1 AND "users"."status" = 'accepted'
如何创建正确的查询?
答案 0 :(得分:0)
因为您使用join_table
,所以需要指定表名
来自@user.friends.where(status: :accepted)
到@user.friends.where('friends.status': :accepted)
答案 1 :(得分:0)
我找到了解决方案。我们可以为此查询使用状态索引。索引存储在Classname.enumnames[]
中的所有枚举状态:
@friends = @user.friends.where(friends: {status: Friend.statuses[:accepted]})