个性化阅读
专注于IT技术分析

Ruby on Rails CRUD操作图解

CRUD代表创建, 读取, 更新和删除数据库中的数据。 Active Record自动允许应用程序读取和操作表中存储的数据。

在本教程中, 我们将使用MySQL数据库创建一个Rails CRUD。

步骤1创建一个新的Rails应用程序。

rails new crud

步骤2将目录更改为crud。

cd crud

步骤3转到应用程序中的Gemfile并添加以下内容。

gem 'grape'

步骤4转到应用程序中的config / application.rb文件, 然后添加以下内容。

config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]

步骤5运行以下命令:

bundle install

步骤6转到app / views / layouts / application.html.erb并将以下行插入head标签。

<%= stylesheet_link_tag??? 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css' %>
<%= stylesheet_link_tag??? 'https://cdn.datatables.net/s/dt/dt-1.10.10, r-2.0.0/datatables.min.css' %>

步骤7转到app / views / layouts / application.html.erb并将以下行插入</ body>标记之前。

<%= javascript_include_tag 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js' %>
<%= javascript_include_tag 'https://cdn.datatables.net/s/dt/dt-1.10.10, r-2.0.0/datatables.min.js' %>

步骤8在上面的文件中, 将<%= yield%>替换为以下代码:

<div class="container">
<div><% if flash[:notice] %>
<div><%= flash[:notice] %></div>
<% end %> <%= yield %></div>
</div>
</div>

步骤9转到app / assets / javascripts / application.js并添加加载jQuery DataTable的javascript代码:

var ready = function() {
 $('#products').DataTable({
  "columnDefs": [
     { "width": "19%", className: "dt-body-center", "targets": -1 }, { "width": "10%", "targets": 0 }, { "width": "7%", "targets": 1 }, { "width": "20%", "targets": 2 }, { "width": "20%", "targets": 3 }, ]
   });
}
$(document).ready(ready);
$(document).on('page:load', ready);

步骤10从控制台创建一个控制器。

rails g controller products index show new create edit update destroy

步骤11从控制台创建模型。

rails g model product name:string price:decimal short_description:text full_description:text

步骤12转到app / controllers / products_controller.rb并编写以下代码。

class ProductsController < ApplicationController 
 
  # GET method to get all products from database 
  def index 
    @products = Product.all 
  end 
 
  # GET method to get a product by id 
  def show 
    @product = Product.find(params[:id]) 
  end 
 
  # GET method for the new product form 
  def new 
    @product = Product.new 
  end 
 
  # POST method for processing form data 
  def create 
    @product = Product.new(product_params) 
    if @product.save 
      flash[:notice] = 'Product added!' 
      redirect_to root_path 
    else 
      flash[:error] = 'Failed to edit product!' 
      render :new 
    end 
  end 
 
   # GET method for editing a product based on id 
  def edit 
    @product = Product.find(params[:id]) 
  end 
 
  # PUT method for updating in database a product based on id 
  def update 
    @product = Product.find(params[:id]) 
    if @product.update_attributes(product_params) 
      flash[:notice] = 'Product updated!' 
      redirect_to root_path 
    else 
      flash[:error] = 'Failed to edit product!' 
      render :edit 
    end 
  end 
 
  # DELETE method for deleting a product from database based on id 
  def destroy 
    @product = Product.find(params[:id]) 
    if @product.delete 
      flash[:notice] = 'Product deleted!' 
      redirect_to root_path 
    else 
      flash[:error] = 'Failed to delete this product!' 
      render :destroy 
    end 
  end 
 
  # we used strong parameters for the validation of params 
  def product_params 
    params.require(:product).permit(:name, :price, :old_price, :short_description, :full_description) 
  end 
 
end

步骤13转到app / models / product.rb并在名称, 价格和描述字段中进行一些验证。

class Product < ApplicationRecord 
validates :name, presence: true 
validates :price, presence: true, numericality: {:greater_than => 0} 
validates :short_description, presence: true 
end

步骤14转到config / routes.rb并添加:

resources :products
root 'products#index'

步骤14转到config / routes.rb并添加:

resources :products
root 'products#index'

步骤15现在在应用程序文件夹中创建一个名为api的文件夹。在此文件夹中, 创建一个名为product的文件夹。现在, 终于创建了app / api / products / products_api.rb文件并添加以下代码。

module Products 
  class ProductsAPI < Grape::API 
 
    format :json 
 
    desc "Product List", { 
        :notes => <<-NOTE 
        Get All Products 
         __________________ 
        NOTE 
    } 
 
    get do 
      Product.all 
    end 
 
 
    desc "Product By Id", { 
        :notes => <<-NOTE 
        Get Product By Id 
         __________________ 
        NOTE 
    } 
 
    params do 
      requires :id, type: Integer, desc: "Product id" 
    end 
 
    get ':id' do 
      begin 
        product = Product.find(params[:id]) 
      rescue ActiveRecord::RecordNotFound 
        error!({ status: :not_found }, 404) 
      end 
    end 
 
    desc "Delete Product By Id", { 
        :notes => <<-NOTE 
        Delete Product By Id 
         __________________ 
        NOTE 
    } 
 
    params do 
      requires :id, type: Integer, desc: "Product id" 
    end 
 
    delete ':id' do 
      begin 
        product = Product.find(params[:id]) 
        { status: :success } if product.delete 
      rescue ActiveRecord::RecordNotFound 
        error!({ status: :error, message: :not_found }, 404) 
      end 
    end 
 
    desc "Update Product By Id", { 
        :notes => <<-NOTE 
        Update Product By Id 
                        __________________ 
        NOTE 
    } 
 
    params do 
      requires :id, type: Integer, desc: "Product id" 
      requires :name, type: String, desc: "Product name" 
      requires :price, type: BigDecimal, desc: "Product price" 
      optional :old_price, type: BigDecimal, desc: "Product old price" 
      requires :short_description, type: String, desc: "Product old price" 
      optional :full_description, type: String, desc: "Product old price" 
    end 
 
    put ':id' do 
      begin 
        product = Product.find(params[:id]) 
        if product.update({ 
                              name: params[:name], price: params[:price], old_price: params[:old_price], short_description: params[:short_description], }) 
          { status: :success } 
        else 
          error!({ status: :error, message: product.errors.full_messages.first }) if product.errors.any? 
        end 
 
 
      rescue ActiveRecord::RecordNotFound 
        error!({ status: :error, message: :not_found }, 404) 
      end 
    end 
 
 
    desc "Create Product", { 
        :notes => <<-NOTE 
        Create Product 
         __________________ 
        NOTE 
    } 
 
    params do 
      requires :name, type: String, desc: "Product name" 
      requires :price, type: BigDecimal, desc: "Product price" 
      optional :old_price, type: BigDecimal, desc: "Product old price" 
      requires :short_description, type: String, desc: "Product old price" 
    
    end 
 
    post do 
      begin 
        product =  Product.create({ 
                                      name: params[:name], price: params[:price], old_price: params[:old_price], short_description: params[:short_description], }) 
        if product.save 
          { status: :success } 
        else 
          error!({ status: :error, message: product.errors.full_messages.first }) if product.errors.any? 
        end 
 
 
      rescue ActiveRecord::RecordNotFound 
        error!({ status: :error, message: :not_found }, 404) 
      end 
    end 
  end 
end

步骤16转到config / routes.rb并添加以下代码。

mount Products::ProductsAPI => '/api/products'

步骤17在控制台中运行以下命令。

rake db:migrate

步骤18在app / views / products /文件中, 编写以下代码。

index.html.erb

<!DOCTYPE html> 
<html> 
<body> 
 <div class="container"> 
    <h3>STOCK LIST</h3> 
   
      <div> 
        <%= link_to 'Add Product', new_product_path %> 
      </div> 
      <br> 
    <table border="2"> 
      <thead> 
      <tr> 
        <th>Name</th> 
        <th>Price</th> 
        <th>Description</th> 
        <th>Actions</th> 
      </tr> 
      </thead> 
      <tbody> 
      <% @products.each do |product| %> 
          <tr> 
            <td><%= product.name %></td> 
            <td><%= product.price %></td> 
            <td><%= truncate(product.short_description, :length => 75) %></td> 
               <div> 
               <td> 
                <%= link_to 'Show', product_path(product) %> 
                <%= link_to 'Edit', edit_product_path(product) %> 
                <%= link_to 'Delete', product_path(product), method: :delete %> 
              </div> 
            </td> 
          </tr> 
      <% end %> 
      </tbody> 
    </table> 
    </div> 
  </body> 
</html>

new.html.erb

<div class="container"> 
  <%= form_for @product, url: {action: :create} do |f| %> 
      <div> 
        <h3>Add a Product</h3> 
      </div> 
      <div> 
        <p> 
          <%= "<div>#{@product.errors.full_messages.first}</div>".html_safe if @product.errors.any? %> 
        <div> 
            <label>Product Name</label> 
              <%= f.text_field :name %> 
        </div> 

        <div> 
             <label>Price</label> 
             <%= f.text_field :price %> 
        </div> 

        <div> 
           <label>Description</label> 
              <%= f.text_field :short_description %> 
        </div> 
		 </p> 
      </div> 
      <div> 
        <%= link_to 'Back', { controller: 'products', action: 'index'} %> 
        <%= f.submit 'Create Product' %> 
      </div> 
  <% end %> 
</div>

edit.html.erb

<div class =” container”> <%= form_for @product, 网址:{action::update} do | f | %> <h3>添加产品</ h3> <%=” <div>#{@ product.errors.full_messages.first} </ div>”。html_safe, 如果@ product.errors.any? %> <p> <div> <label>产品名称</ label> <%= f.text_field:name%> </ div> <div> <label> Price </ label> <%= f.text_field:price %> </ div> <div> <label>描述</ label> <%= f.text_field:short_description%> </ div> </ p> <div> <%= link_to’Back’, {controller:’产品”, 操作:’index’}%> <%= f。提交’Update Product’%> </ div> <%end%> </ div>

show.html.erb

<div class="container">      
        <h3>Add a Product</h3> 
     
            <div> 
              <label>Product Name</label> 
              <%= @product.name %> 
            </div> 

            <div> 
              <label>Price</label> 
              <%= @product.price %> 
            </div> 
          
            <div> 
              <label>Description</label> 
              <%= @product.short_description %> 
            </div> 
       
      <div> 
        <%= link_to 'Back', { controller: 'products', action: 'index'} %> 
      </div> 
</div>

步骤19从命令行启动服务器。

rails s

步骤20在本地主机上运行该应用程序。

localhost:3000/products

将出现以下页面。在这里, 我们已经在表中插入了一些数据。

Rails Ruby Rails Crud 1上

插入资料

Rails Ruby Rails Crud 2上

要插入数据, 请单击以上快照中所示的”添加产品”。如下所示填写详细信息。

Rails Ruby Rails Crud 3上

读取资料

要读取数据, 请单击操作显示。在这里, 我们将单击”跳伞表演”动作。

Rails Ruby Rails Crud 4上

更新资料

要更新数据, 请单击”编辑操作”。在这里, 我们将编辑从男式正装衬衫到女式正装衬衫的衬衫描述。

Rails Ruby Rails Crud 5上
Rails Ruby Rails Crud 6上

删除资料

要删除数据, 请单击”删除”操作。在这里, 我们将从上表中删除产品牛仔裤。

Rails Ruby Rails Crud 7上

下载

下载此示例

赞(0) 打赏
未经允许不得转载:srcmini » Ruby on Rails CRUD操作图解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏