У меня есть рельсы 3 приложения.
У меня есть следующий сценарий: есть ученики и учителя, которые взаимодействуют. Основываясь на некоторых из этих взаимодействий, учитель может выбрать, чтобы дать ученику вознаграждение, то есть студенческое вознаграждение.
class Student
has_many :interactions
has_many :teachers, :through=>:interaction
class Teacher
has_many :interactions
has_many :students, :through=>:interaction
has_many :rewards
class Interaction
belongs_to :teacher
belongs_to :student
has_many :student_rewards
has_many :rewards, :through=>:student_reward
class Reward
belongs_to :teacher
has_many :student_rewards
class StudentRewards
belongs_to :reward
belongs_to :interaction
Как эксперт кодировал бы эффективный подход к получению всех наград, которые имеют учителя учащегося [не обязательно те, которые выиграл ученик], а также отображает информацию об учителях на дисплее?
Я пробовал это, но я должен отдельно получать информацию об учителе, и это плохо. (при условии, что student_id = 1):
@rewards = Reward.joins(:teacher => :interactions)
.where("interactions.student_id=1")
.paginate(:page => params[:page], :per_page => 5)
Вопросы:
- Это лучший способ сделать это?
- Когда я повторяю это в представлении, мне нужно выполнить дополнительные запросы для отображения информации об учителе [имя, демография]. Как я могу получить это более эффективно?
Я хочу иметь возможность сделать это:
<% for reward in @rewards%>
<%= reward.name, reward.teacher.name, reward.teacher.bio%><br>
<%end%>