Rails(5.0.1)"向后"查询多对多的自联接

时间:2016-10-24 23:33:45

标签: ruby-on-rails activerecord

使用经典友谊示例,我可以查询其他用户有这样的朋友的用户:

super.paintComponent(g)

但是有没有一种优雅的方式来抓住相反的关系?目前查询:

User.first.friends

从多个表中返回一个类似于下面的选择(下面的模型和模式代码):

User.first.friendships

我是否有一种优雅的方式可以为拥有用户1的用户抓取所有用户记录?就此而言,是否有一个查询可以从用户1的友情中获取所有用户记录?

Schema.rb:

+---------+-----------+
| user_id | friend_id |
+---------+-----------+
| 1       | 2         |
| 1       | 3         |
+---------+-----------+

模特关系:

create_table "friendships", id: false, force: :cascade do |t|
    t.integer "user_id"
    t.integer "friend_id"
end

create_table "users", force: :cascade do |t|
    t.string   "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

1 个答案:

答案 0 :(得分:1)

  

我是否有一种优雅的方式来获取所有用户记录   有用户1的朋友?

app.get('/users', function(req, res) { modelM.find({}, 'name', function(err, users) { if(err) throw err; res.send(users); }); }); 与关联条件一起使用:

.joins
  

就此而言,是否有一个查询可以让我所有的用户   用户1的友情记录?

User.joins(:friendships)
    .where(friendships: { friend_id: 1 })