Просмотреть помощник для удаления вставки объекта класса в поле зрения - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть страница в моем приложении rails, где я перебираю коллекцию категорий и добавляю ссылку на них. По ссылке будет идти страница категории

   <%@categories.each_with_index do |category, index|%>
    <div class="category-result">
        <div class="category-title"><%= link_to category["name"], 
        admin_question_path(index: 
       Question.first_category_question(category))%></div>
    ...

Я определил метод ниже

def self.first_category_question(category)
  Question.get_all_questions_by_category(category["name"])
          .first.question_index
end

Есть ли способ в рельсах двигаться Question.first_category_question (категория) помощнику. Обычно я сохраняю это в переменной экземпляра, например @first_category_question в контроллере, и использую его в представлении, но у меня есть аргумент (категория).

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Можете ли вы создать связь между категориями и вопросами?

Например, если категория has_many :questions, вы сможете выполнить категорию.вопросы, чтобы вернуть все интересующие вас вопросы.

Чтобы избежать N + 1, вы можете использовать Category.includes(:questions).find_by(params) в контроллере, чтобы собрать их всех одним запросом к базе данных.

Дайте мне знать, если вы хотите, чтобы я объяснил больше.

0 голосов
/ 07 сентября 2018

Вы создаете проблему N + 1, делая это таким образом.Избегайте этого, заранее подготовив данные в контроллере, как вы сказали.Предварительно сделайте необходимый запрос в контроллере, чтобы сделать это с помощью одного обращения к БД, затем создайте массив хешей и используйте этот хеш для построения ваших ссылок в представлении, не делая дополнительных вызовов к БД.

У вас будет массив хэшей с чем-то вроде:

@categories_and_questions = [{ name: 'category1', index: 1 }, { name: 'category2', index: 3 }]

@categories_and_questions.each do |cat|
  <div class="category-result">
    <div class="category-title"><%= link_to cat[:name], 
    admin_question_path(index: cat[:index])%></div></div>
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...