2013-10-14 2 views
0

У меня две модели в ROR, одна из которых - Note, а другая - Access. Каждый Access имеет поле Note и поле пользователя. В моем указательном действии контроллера заметок я хочу фильтровать заметки, принадлежащие пользователю (сделанные), а также заметки, доступные пользователю, которые я назвал @accessible_notes. Следующий код дает мне правильные примечания, принадлежащие пользователю, однако я не могу получить заметки, доступные пользователю.Как получить доступ к модели из другой модели?

В принципе, мне нужно найти все Accesses, в которых задействован пользователь, а затем получить соответствующие заметки. Как я могу это сделать?

def index 
    @notes = Note.where(user: current_user) 
    @personal_access = Access.where("user_id = ?",current_user.id) 
    @accessible_notes = [] 
    @personal_access.each do |accessible| 
    tnote = Note.find(accessible.note_id) 
    @accessible_notes += tnote if tnote 
    end 
end 

ответ

0

Как насчет

@personal_access.each do |accessible| 
    @accessible_notes << accessible.note 
end 
@accessible_notes.flatten! 

Там может быть более быстрым способом, используя Active Record queries.

И этот более быстрый способ находится в ответе депы.

2
class User < ActiveRecord::Base 
    has_many :accessible_notes, :through => :accesses, :source => :notes 
end 

@accessible_notes = current_user.accessible_notes 
Смежные вопросы