2013-04-21 5 views
1

Считается ли лучшим вариантом назвать модель Rails другой модели? (Код ниже):Вызов модели Rails с другой модели

#models/user.rb 
def get_pending_requests(user_id) 
    Friend.where("friend_id = ? AND approved = ?", user_id, false) 
end 

Я считаю, это немного неудобно выполнять RSpec/FactoryGirl тесты делают это, в отличие от выполнения этих действий внутри контроллера.

ответ

4

Могу ли я предложить другой подход? Предполагая, что ваши модели настроены следующим образом:

class Friend < ActiveRecord::Base 
    belongs_to :user 

    scope :pending, -> { where(approved: false) } 
end 

class User < ActiveRecord::Base 
    has_many :friends 

    def pending_requests 
    friends.pending 
    end 
end 

Таким образом, вы создаете область действия, ожидающую ответа на друга. Затем вы можете использовать эту область действия для своих друзей. Я считаю, что это более стандартный подход.

+0

Я думаю, это должно быть self.friends, нет? Мой пример не был правильно проиллюстрирован, хотя я думал больше о методе 'add_friend', который создавал бы новую запись на' self.friends.new (...) ' – zakelfassi

+0

Это не обязательно, если вы не ожидаете столкновения между метод друзей и локальная переменная, называемая друзьями. –

+1

Да, вы можете это сделать. В вашем методе 'add_friend' вы можете сделать' self.friends.pending.create (...) '. Это создаст ожидающего друга с правильно установленным идентификатором. –