Hello,
Myself Mukheem. I have just started working with Ruby on Rails.
I am trying to create a small billing application where a receptionist can bill the items and give the receipt to customer.
Now, I wanted to white list all the items from HTML table from front end and save them to DB, JSONB format in a record.
White listing a text_field is easy. but I dont know how to do it when the same is present in a HTML table. Some how i managed to reach till this point. Rest of the details are as follows.
HTML Code
<tr>
<td><input id="order[orderplaced][:itemname][0]" name="order[orderplaced][:itemname][0]" type="text" /></td>
<td><input id="order[orders_attributes][0][quantity]" name="order[orderplaced][:quantity][0]" type="text" /></td>
<td><input id="order[orders_attributes][0][unitprice]" name="order[orderplaced][:unitprice][0]" type="text" /></td>
<td><input id="order[orders_attributes][0][tax]" name="order[orderplaced][:tax][0]" type="text" /></td>
<td><input id="order[orders_attributes][0][discount]" name="order[orderplaced][:discount][0]" type="text" /></td>
<td><input id="order[orders_attributes][0][itemtotalprice]" name="order[orderplaced][:itemtotalprice][0]" type="text" /></td>
</tr>
Only one row is static, rest rows are added dynamically on the fly as per need(Java script is used). I came to know that there are a few changes which needs to be made in front end code as well. but I am not sure in which format rails expect.
Controller Code
class OrdersController < ApplicationController
def new
@order=Order.new
end
def create
@order=Order.new(fixed_order_params )
@order.save
end
private
def order_params
params.require(:order).permit(:ordertype, :totalprice, :paymentmethod, {orderplaced: {":itemname": ["0"], ":quantity": ["0"], ":unitprice": ["0"], ":tax": ["0"], ":discount": ["0"], ":itemtotalprice": ["0" ]}})
end
def orderplaced_params
order_params[:orderplaced].to_h.map do |order_line_item |
order_line_item.each_with_object({}) do |(k,v), hsh |
hsh[k.gsub(":","")] = v["0" ]
end
end
end
def fixed_order_params
order_params.slice(:ordertype, :totalprice, :paymentmethod).merge!(orderplaced: orderplaced_params )
end
end
Error recieved in orderplaced_params method
NoMethodError (undefined method’ for nil:NilClass):
Pathforward
I wanted to save array of hashes to DB, JSONB format and display them to the receptionaist on Demand.
Can some one help me please.
Advance Thanks…!!! Mukheem.