У меня есть следующие модели в моем приложении Rails:
class Test
has_many :tests_profiles
has_many :class_profiles
class TestsProfile
belongs_to :class_profile
belongs_to :test
class ClassProfile
has_many :tests_profiles
Я должен запросить tests
, принадлежащий конкретному ClassProfile
. Моя текущая вспомогательная функция выглядит так:
def get_tests(class_profile)
return Test.joins(:tests_profiles).where(tests_profiles: {class_profile_id: class_profile.id})
В моем файле erb
я просматриваю результат следующим образом:
<% tests = get_tests(class_profile) %>
<% tests.each do |test| %>
<th><%= test.name %></th>
<% end %>
Но проблема в том, что я получаю имена всех тестов, а не только те, которые связаны с этим конкретным ClassProfile
. Как я могу исправить его, чтобы он работал так, как я хочу?
Я хочу запросить его у TestProfile
. Как я могу это сделать?
Я отредактировал вопрос сейчас.
Я вообще не понимаю вашу модель данных. Вы связали Test
многие с одним с ClassProfile
?
да. Test
может быть много ClassProfiles
, как один и тот же тест для разных разделов одного класса или класса в школе. TestProfile
как предметы. Таким образом, в тесте может быть много предметов. Точно так же у ClassProfile
может быть много TestProfiles
. Вот какой должна быть моя модель данных. Если в вопросе есть что-то не так с моей моделью данных, сообщите мне.
У вас где-то опечатка - has_many :tests_profiles
но class TestProfile
. Обратите внимание на разницу между test
и tests
, она должна быть одинаковой для обоих случаев.
Да. Я понял. В вопросе была опечатка. Изменил!
Вы можете использовать has_many through
здесь:
class Test
has_many :tests_profiles
has_many :class_profiles, through: :tests_profiles
class TestsProfile
belongs_to :class_profile
belongs_to :test
class ClassProfile
has_many :tests_profiles
has_many :tests, through: :tests_profiles
и используйте class_profile.tests.each do
в представлении
«тесты, принадлежащие конкретным
ClassProfile
» — похоже, все, что вам нужно, этоclass_profile.tests
.