Tutorials‎ > ‎

Ruby on Rails Tutorial (Part 2)

posted Dec 10, 2017, 7:11 PM by Mario Viegash   [ updated Dec 11, 2017, 11:59 PM ]

This is the second part of Ruby on Rails, in this part we will learn about how to update and deleting product that inserted using code we have built in the first tutorial.

Update and Delete Product Component

We are going to create a component that we will use to update and deleting a new product.

“[Project Name]/app/views/product/index.html.erb”

1.   <h1>All Product</h1>  

2.     

3.   <table border="1" cellspacing="0" cellpadding="0" width="50%" style="text-align: center">  

4.       <tr>  

5.           <th>No</th>  

6.           <th>Product Name</th>  

7.           <th>Product Type</th>  

8.           <th>Product Stock</th>  

9.           <th>Product Price</th>  

10.         <th>Action</th>  

11.     </tr>  

12.     <!-- Product in here get from controller and how to loop the data ? We can use .each and set to variable -->  

13.     <% @product.each do |p| %>  

14.         <tr>  

15.             <!-- The data from the table taken using column name  -->  

16.             <td><%= p.id %></td>   

17.             <td><%= p.product_name %></td>  

18.             <td><%= p.product_type %></td>  

19.             <td><%= p.product_stock %></td>  

20.             <td><%= p.product_price %></td>  

21.             <td>  

22.                 <!-- Give button or link for redirect to update and delete -->  

23.                 <%= link_to :"Edit", controller: "product", action:"edit", id:p.id %>  

24.                 or  

25.                 <%= link_to :"Delete", controller: "product", action:"delete", id:p.id%>  

26.             </td>  

27.         </tr>  

28.     <% end %>  

29. </table>  

30. <br>  

31. <!-- We can use link_to for link to different html through controller -->  

32. <%= link_to "Add New Product", controller: "product", action:"new" %>  

“[Project Name]/app/views/product/edit.html.erb”

1.   <h1>Edt Product</h1>  

2.     

3.   <%= form_for @product, url:{action:"update"}, html:{class:"form"} do |p|%>  

4.       <p>  

5.           <%= p.label(:product_name)%>  

6.           <%= p.text_field :product_name%>  

7.       </p>  

8.     

9.       <p>  

10.         <%= p.label(:product_type)%>  

11.         <%= p.text_field :product_type%>  

12.     </p>  

13.   

14.     <p>  

15.         <%= p.label(:product_stock)%>  

16.         <%= p.text_field :product_stock%>  

17.     </p>  

18.   

19.     <p>  

20.         <%= p.label(:product_price)%>  

21.         <%= p.text_field :product_price%>  

22.     </p>  

23.   

24.     <p>  

25.         <%= p.submit "Submit" %>  

26.     </p>  

27.   

28.     <p>  

29.         <%= link_to :"Back", controller: "product", action:"index" %>  

30.     </p>  

31. <%end%>  

“[Project Name]/config /routes.rb”

1.   Rails.application.routes.draw do  

2.       

3.     get 'product/index'  

4.     

5.     get 'product/new'  

6.       

7.     # Modified to get product using id   

8.     get 'product/:id/edit':to => "product#edit":as => "edit"  

9.     

10.   get 'product/:id/delete':to => "product#delete":as => "delete"  

11.   

12.   # We use method post to send the data from html form to controller  

13.   post "create":to => "product#create"  

14.   

15.   # If we want to update product, i recommend you using patch because   

16.   # patch allows for both full and partial updates of a resource, and is more suited to how Rails updates resources  

17.   patch "product/:id":to => "product#update"  

18.   

19.   # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html  

20. end  

The Main Application

The main application will be used to update and delete our data, with the update and delete product component as its child.

“[Project Name]/app.controller/product_controller.rb”

1.   class ProductController < ApplicationController  

2.     def index  

3.       # to connect the table product we can call using the model  

4.       @product = Product.all # .all in here like query SELECT * FROM product  

5.     end  

6.     

7.     def new  

8.       @product = Product.new # .new in here to create a new data from product  

9.     end  

10.   

11.   def create  

12.     @product = Product.new(product_params)  

13.     if @product.save # .save in here for save the data and check the data saved or not   

14.       redirect_to action: "index"  

15.     else  

16.       redirect_to action: "new"  

17.     end  

18.   end  

19.   

20.   def edit  

21.     @product = Product.find(params[:id]) # params in here for get id from html form by clicking button update in index.html.erb  

22.   end  

23.   

24.   def update  

25.     @product = Product.find(params[:id])  

26.   

27.     if @product.update_attributes(product_params) # .update_attributes in here for update the data and check the data updated or not  

28.       redirect_to action: "index"  

29.     else  

30.       redirect_to action: "edit"  

31.     end  

32.   end  

33.   

34.   def delete  

35.     @product = Product.find(params[:id])   

36.       

37.     @product.destroy # .destory in here for delete the data  

38.     redirect_to action: "index"  

39.   end  

40.   

41.   private  

42.   

43.   # We create method private for just thic controller can access and this method use to get data from html form  

44.   def product_params  

45.     params.require(:product).permit(:product_name:product_type:product_stock:product_price)  

46.   end  

47. end  

The Result

The result from update product, example update product price Orange Water to 8000.

“localhost:3000/product/index”


“localhost:3000/product/edit”


“locahost:3000/product/index”


“localhost:8088/phpmyadmin”


The result from delete product, example delete product The Botol.

“Localhost:3000/product/index” -> Before


“Localhost:3000/product/index” -> After


“localhost:8088/phpmyadmin”


Tips and Trick CRUD

If you see this tutorial to slowly for create CRUD not effective, I recommend you using Scaffolding for create faster CRUD. Scaffolding in Ruby on Rails refers to the auto generation of simple set of a model, views and controller usually for a single table. How to use it? You can run command “rails generate scaffold NAME [field[:type][:index] field[:type][:index]]” and then you just run the application. 

Comments