添加分類功能 Category for Ruby On Rails app

參考https://blog.skcript.com/implementing-categories-in-ruby-on-rails-14c2b5e77b34#.ugsdz8w8b
參考http://taomengdi99.logdown.com/posts/1420713

近日做了一個(gè)商品購物網(wǎng)站(https://github.com/AnattaGuo/jdstore2),想給admin賬戶添加商品分類功能。

  1. 在命令端輸入rails g scaffold category name:string desc:text

    Snip20170305_20.png

  2. 在命令端輸入rake db:migrate

  3. 在命令端輸入rails generate migration AddColumnsToProducts category_id,然后輸入rake db:migrate

    Snip20170305_22.png

  4. 建立product model和category model的relationship. 修改如下兩個(gè)文件:

#app/models/product.rb
belongs_to :category
Snip20170305_25.png
#app/models/category.rb
has_many :products

Snip20170305_26.png
5. 在admin::products#controller文件里給new、edit、update、create添加代碼@categories = Category.all.map{|c| [ c.name, c.id ] }, 給product_params添加:category_id:

#app/controllers/admin/products_controller.rb

class Admin::ProductsController < ApplicationController

  layout "admin"
  before_action :authenticate_user!
  before_action :admin_required

  def index
    if params[:category].blank?
      @products = Product.all
    else
      @category_id = Category.find_by(name: params[:category]).id
      @products = Product.where(:category_id => @category_id)
    end
  end

  def new
    @product = Product.new
    @categories = Category.all.map{|c| [ c.name, c.id ] }
  end

  def edit
    @product = Product.find(params[:id])
    @categories = Category.all.map{|c| [ c.name, c.id ] }
  end

  def update
    @product = Product.find(params[:id])
    @product.category_id = params[:category_id]

    if @product.update(product_params)
      redirect_to admin_products_path
    else
      render :edit
    end
  end

  def create
    @product = Product.new(product_params)
    @product.category_id = params[:category_id]

    if @product.save
      redirect_to admin_products_path
    else
      render :new
    end
  end

  private

  def product_params
    params.require(:product).permit(:title, :description, :quantity, :price, :image, :category_id)
  end
end
Snip20170305_33.png

Snip20170305_35.png
6. 在app/views/admin/products/edit.html.erbapp/views/admin/products/new.html.erb兩個(gè)文件里添加以下代碼:

 <%= select_tag(:category_id, options_for_select(@categories), :prompt => 'Select one!') %>

Snip20170305_29.png
7. 去http://localhost:3000/categories 新建類別
new category.gif
8. 將category的選項(xiàng)呈現(xiàn)在admin的頁面上。在app/views/layouts/admin.html.erb里添加如下代碼:

這樣在http://localhost:3000/admin/products 下面就可看到catetory了

Snip20170305_38.png

最終分類成果演示:


new category-new product.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容