按所有权过滤记录

时间:2015-09-28 17:38:41

标签: ruby-on-rails ruby-on-rails-4

对标题感到抱歉,无法想出一个更好的描述我正在尝试做的事情。

previous question中,一些用户建议我可以简化模型。我没有得到任何评论,但我认为我正在做'正确的方式',因为我需要在连接表中存储其他属性。

无论如何,我的模型都是这样设置的。

class Student < ActiveRecord::Base
    has_many :student_notes
    has_many :notes, :through => :student_notes

    has_many :relationships
    has_many :users, :through => :relationships
end

class Note < ActiveRecord::Base
    has_many :student_notes
    has_many :students, :through => :student_notes
end

class StudentNote < ActiveRecord::Base
    belongs_to :student
    belongs_to :note
end

class User < ActiveRecord::Base
    has_many :relationships
    has_many :students, :through => :relationships
    has_many :notes, :through => :students
end

class Relationship < ActiveRecord::Base
  belongs_to :student
  belongs_to :user
end

现在,在我的笔记显示视图中我有这个:

    ...
    <% @note.students.each do |student| %>
      <tr>
        <td><%= link_to student.full_name, student %></td>
      </tr>
    <% end %>
    ...

这是有效的,除了我想只显示属于current_user的学生。 关于如何实现它的任何提示?我想模型中的辅助方法是可行的方法,但我完全迷失了。

谢谢!

1 个答案:

答案 0 :(得分:1)

Student

scope :belonging_to, -> (u) { joins(:users).where users: { id: u.id } }

然后:

@note.students.belonging_to(current_user)...