0

我只是想尽其所能使用 ActiveRecord,但在以我想要的方式进行连接时遇到了麻烦。

这是我的模型的设置方式:

class Model
    has_many :likes
end

class Like
    belongs_to :model
    belongs_to :user
end

class User
    has_many :likes
end

我想从“模型”对象中获得所有喜欢,并从那里获得所有喜欢的用户。所以这就是我的 ActiveRecord 查询

@model = Model.find(params[:id])
@users = @model.likes.joins(:user)

但是,最后一行代码返回的是一个赞,而不是用户。有什么方法可以适当地使用连接并做我想做的事吗?

谢谢,

4

2 回答 2

3

你可以这样做has_many :through

class Model
    has_many :likes
    has_many :users, :through => :likes
end

或者你可以急切地加载用户并在 ruby​​ 中加入:

@users = @model.likes.includes(:user).map(&:user)
于 2013-05-08T14:43:46.010 回答
1

如果您使用 gem meta_where,您可以使用范围合并来获取您的数据。

@users = User.scoped & (Like.scoped & Model.where(:id => params[:id]))

这将返回一个基于 的 active_record 关系对象User,例如您可以对其进行迭代。

这是 alfonso 展示的另一种方法。他的也会起作用。

于 2013-05-08T15:15:07.790 回答