0

В моей Rails 3 приложения я получил пользователей, которые имеют:Желая элегантный ActiveRecord цепочки

  • друзья (и они являются пользователями, тоже)
  • деятельности (через PublicActivity)

Существует действие, в котором мне нужно отображать действия моего друга.

Я хотел бы сделать это с помощью цепи, как это (и мой вопрос: , как я могу это сделать):

@activities = current_user.friends.activities 

Но это не будет работать, потому что current_user.friends возвращает ActiveRecrord :: Relation объект.

undefined method `activities' for #<ActiveRecord::Relation:0xc4d7770> 

Я должен запросить их так:

@activities = PublicActivity::Activity.where(owner_id: current_user.friend_ids) 

Он работает нормально, но это не так элегантно, как я хочу, чтобы это было :)

Итак, есть более элегантный способ запросить действия друга с помощью цепочки?

Модель пользователя выглядеть следующим образом:

class User < ActiveRecord::Base 
    has_many :friendships 
    has_many :friends, through: :friendships # 

    has_many :activities, class_name: "::PublicActivity::Activity", as: :owner 
    # ... 
end 

class Friendship < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :friend, class_name: "User" 
end 
+0

has_many ': extend' может быть тем, что вы ищете? см. http://guides.rubyonrails.org/association_basics.html#association-extensions – house9

ответ

0

Если я буду читать то, что вы ищете правильно, кажется, что вы пытаетесь сделать присоединиться.

ActiveRecord поддерживает загрузку через входящий вызов, который также может иметь условия.

http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations

Это я думаю, что бы решить проблему.

+0

actualy, join или include не проблема - я просто ищу еще один элегантный способ AR-запроса. Спасибо, в любом случае :) –

Смежные вопросы