Как показать организованные данные из тега содержимого вспомогательного рельса - PullRequest
0 голосов
/ 04 июня 2018

Как показать организованные данные из тега содержимого rails helper?

Как показано ниже, это мой вспомогательный метод, и я хочу показать все имена категорий, сгруппированные по родителям, и это ul li Если вы можете увидеть ниже метод, я думаю, вы поймете этот код и что я хочу.Этот метод выводил данные, но не с ul li

Вспомогательный метод

def category
    parent_categories = Category.select(:id, :name, :parent).group_by(&:parent)
    parent_categories.each do |parent, childs|
        content_tag(:div) do 
            content_tag(:h1, parent)
        end +
        content_tag(:ul) do 
            childs.each do |child|
                content_tag(:li, child.name)
            end
        end
    end
end

с выводом <%= category %>

{"Technology"=>[#<Category id: 1, name: "Programming", parent: "Technology">, #<Category id: 3, name: "Ruby on Rails", parent: "Technology">, #<Category id: 9, name: "Full Time", parent: "Technology">, #<Category id: 14, name: "Business Opportunities", parent: "Technology">, #<Category id: 15, name: "Contract & Freelance", parent: "Technology">, #<Category id: 18, name: "Engineering", parent: "Technology">, #<Category id: 25, name: "IT", parent: "Technology">], 

"Education"=>[#<Category id: 5, name: "Industry", parent: "Education">, #<Category id: 6, name: "Education", parent: "Education">, #<Category id: 7, name: "Education & Industry", parent: "Education">, #<Category id: 16, name: "Customer Service", parent: "Education">, #<Category id: 17, name: "Diversity Opportunities", parent: "Education">],

"Other"=>[#<Category id: 8, name: "Part Time", parent: "Other">, #<Category id: 12, name: "Admin & Clerical", parent: "Other">]}

схемы.рб

create_table "categories", force: :cascade do |t|
  t.string "name"
  t.string "parent"
end

Это были мои проделанные работы.

После того, как пример, что я хочу, как

Технология (Родитель)

  • Программирование
  • Ruby on Rails
  • Ruby
  • ReactJS

Образование (родитель)

  • Офис
  • Учитель
  • Физика

Другое (Родитель)

  • Клинический
  • Здоровье
  • и т.д ...

Пожалуйста, помогите мне сделать это.

Спасибо

1 Ответ

0 голосов
/ 04 июня 2018

Вы используете ERB в своем помощнике, но это не файл html.erb, поэтому вы не получаете теги, которые пытаетесь создать.Почему бы просто не использовать созданный вами хеш, и тогда я думаю, что вы ищете что-то вроде:

Вспомогательный метод:

def category
  Category.select(:id, :name, :parent).group_by(&:parent)
end

И в вашем файле просмотра (.html)..erb) сделать что-то вроде:

  <% category.each do |cat, list| %>
    <div class="category">
      <b> <%= cat %> </b>
      <ul>
        <% list.each do |item| %>
          <li> <%= item.name %> </li>
        <% end %>
      </ul>
    </div>
    <br>
  <% end %>

ОК, вы можете сделать это так, как вы предлагаете, используя метод concat в соответствии с документацией:

def category
    parent_categories = Category.select(:id, :name, :parent).group_by(&:parent)
    parent_categories.each do |parent, childs|
        concat content_tag(:div) do 
           concat content_tag(:h1, parent)
        end 
       concat content_tag(:ul) do 
            childs.each do |child|
               concat content_tag(:li, child.name)
            end
        end
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...