HABTM查询来自连接表的条件

时间:2015-12-09 23:45:04

标签: ruby-on-rails

我的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'

如何创建正确的查询?

2 个答案:

答案 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]})
相关问题