Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails视图和控制器中迭代记录_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 在rails视图和控制器中迭代记录

Ruby on rails 在rails视图和控制器中迭代记录,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,如何在rails视图中输出类别和子类别?像这样: 第一类名称 第一个类别子项1名称 第一个类别子2名称 第一个类别子3名称 第二类名称 第二个类别子项1名称 第二个类别子2名称 第二个类别子3名称 我的模式.rb: create_table "categories", force: :cascade do |t| t.integer "title" t.boolean "state", default: true t.integer "

如何在rails视图中输出类别和子类别?像这样:

  • 第一类名称
    • 第一个类别子项1名称
    • 第一个类别子2名称
    • 第一个类别子3名称
  • 第二类名称
    • 第二个类别子项1名称
    • 第二个类别子2名称
    • 第二个类别子3名称
我的模式.rb

create_table "categories", force: :cascade do |t|
    t.integer  "title"
    t.boolean  "state",          default: true
    t.integer  "parent_id"       # id of parent category
end
我的类别\u控制器.rb

def show
    @category = Category.find(params[:id])
    #child categories of current parent category
    @child_categories = Category.where(parent_id: @category.id)
    #subchild categories of current parent category
    @child_categories.each do |category|
        @subchild_categories = Category.where(parent_id: category.id)
    end
end
<% if @child_categories.any?  %>
<ul>
<% @child_categories.each do |child| %>
    <li>
        <%= child.title %>
        <ul>
            <% @subchild_categories.each do |subchild| %>
                <li><%= subchild.title %></li>
            <% end %>
        </ul>
    </li>
<% end %>
</ul>
<% end %>
myshow.html.erb

def show
    @category = Category.find(params[:id])
    #child categories of current parent category
    @child_categories = Category.where(parent_id: @category.id)
    #subchild categories of current parent category
    @child_categories.each do |category|
        @subchild_categories = Category.where(parent_id: category.id)
    end
end
<% if @child_categories.any?  %>
<ul>
<% @child_categories.each do |child| %>
    <li>
        <%= child.title %>
        <ul>
            <% @subchild_categories.each do |subchild| %>
                <li><%= subchild.title %></li>
            <% end %>
        </ul>
    </li>
<% end %>
</ul>
<% end %>

现在我得到了这样的结果:

  • 第一类名称
    • 第二个类别子项1名称
    • 第二个类别子2名称
    • 第二个类别子3名称
  • 第二类名称
    • 第二个类别子项1名称
    • 第二个类别子2名称
    • 第二个类别子3名称
#试试这个:
def秀
@category=category.find(参数[:id])
@子类别=类别。其中(父类别id:@Category.id)
@子孩子_类={}
@儿童|类别。每个do |类别|
@子子女类别[类别.标题]=类别.其中(父项id:类别.id)
结束
结束
#鉴于:

  • 您可以在
    类别
    模型中创建一个
    子类
    方法,该方法调用
    where(parent\u id:id)
    ,然后您就可以使用它了

    def self.children
      where(parent_id: id)
    end
    
    然后,您可以在您的视图上使用它,只要您愿意:

    @category.children.each do |child_category|
      child_category.children.each do |sub_child_category|
        sub_child_category.children.each do |sub_sub_child_category|
          // as much as you want to
        end
      end
    end