在Rails4中添加子类别

Min*_*ohn 0 migration ruby-on-rails categories ruby-on-rails-3 ruby-on-rails-4

我有很多主要类别,并希望添加到每个子类别.->

主要类别
- 子类别
- 子类别
- 子类别

主要类别
- 子类别
- 子类别
- 子类别

很多人建议我使用宝石,但由于我对Rails相当陌生,我宁愿自己学习如何做到这一点,也要学习他们所有的方法.

我应该从一个Scaffold或简单的开始Model吗?

有人可以解释我如何开始(迁移等)以及如何设置它?

谢谢.

Jon*_*ret 6

您必须生成一个新模型rails g model category,然后编辑生成的文件db/migrate并写入

class CreateCategories < ActiveRecord::Migration
    def change
        create_table :categories do |t|
            t.belongs_to :category
            t.string :name, :null => false
            t.timestamps
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

并编辑 app/models/category.rb

class Category < ActiveRecord::Base

    belongs_to :category
    has_many :children, :dependent => :destroy, :class_name => 'Category'

end
Run Code Online (Sandbox Code Playgroud)

您必须执行rake db:migrate以在数据库中创建表.

编辑:

在app/controllers/categories_controller.rb中

class CategoriesController < ApplicationController

    def index
        @categories = Category.all
    end

    def new
        @category = Category.new
    end

    def edit
        @category = Category.find(params[:id])
    end

    def create
        @category = Category.new(params[:category].permit!)
        if @category.save
            redirect_to categories_url
        else
            render :new
        end
    end

    def update
        @category = Category.find(params[:id])
        if @category.update_attributes(params[:category].permit!)
            redirect_to categories_url
        else
            render :edit
        end
    end

    def destroy
        Category.destroy(params[:id])
        redirect_to categories_url
    end

end
Run Code Online (Sandbox Code Playgroud)

以及您的类别的表单:

<%= form_for @category do |f| %>

    <%= f.text_field :name %>
    <%= f.select :category_id, options_from_collection_for_select(Category.all, :id, :name, @category.category_id), :include_blank => true %>

    <%= f.submit %>

<% end %>
Run Code Online (Sandbox Code Playgroud)