How to retrieve data from a table in rails - ruby-on-rails

I have a table that stores all billing history for each user. I need to display certain fields from this table in an invoice for the user. When I call the variables in my view I get a 'undefined method error'.
Here is a small example of what i have in the view.
<tbody>
<tr>
<td>
Invoice Number
</td>
<td>
<%= #billing_history.id %>
</td>
</tr>
<tr>
<td>
Issue Date
</td>
<td>
<%= #billing_history.created_at.strftime('%d/%m/%Y' ) %>
</td>
</tr>
<tr>
<td>Tax Number</td>
<td>
######
</td>
</tr>
</tbody>
Here is my controller
def invoice
#company = current_user.company
#billing_history = BillingHistory.find_by(id: params[:billing_id])
# raise 'not for you' if #billing_history.company != #company.id
render pdf: 'billings/invoice'
end
Here is my full error message
> `ActionView::Template::Error (undefined method `id' for nil:NilClass):
4: <meta charset="UTF-8" />
5: <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6: <meta http-equiv="X-UA-Compatible" content="ie=edge" />
7: <title>Invoice <%= #billing_history.id %></title>
8: <style>
`

try using byebug place it after
#billing_history = BillingHistory.find_by(id: params[:billing_id]) this line
then check what is the value of #billing_history if it's nil then use The Safe Navigation Operator (&.) like #billing_history&.id ,that won't raise any error.

Related

Gitlab+Jenkins through webhook it shows this error, how can I solve this?

Hook executed successfully but returned HTTP 403:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Error 403 No valid crumb was included in the request</title>
</head>
<body>
<h2>HTTP ERROR 403 No valid crumb was included in the request</h2>
<table>
<tr>
<th>URI:</th>
<td>/job/pipeline3</td>
</tr>
<tr>
<th>STATUS:</th>
<td>403</td>
</tr>
<tr>
<th>MESSAGE:</th>
<td>No valid crumb was included in the request</td>
</tr>
<tr>
<th>SERVLET:</th>
<td>Stapler</td>
</tr>
</table>
<hr>Powered by Jetty:// 9.4.27.v20200227
<hr/> </body>
</html>
Screenshot

How can I pass HTML table data from a view to controller in grails?

I'm quite new in grails. I'm creating an SMS send module for my project. Here I'm getting some contact number from the user and displaying it inside a dynamically created 'TD' value. Now I want to pass this 'TD' values as a list to my controller.
def controller(){
def var = params.name
}
won't work here as it's not a field value.
Get all table td into array comma separated contact numbers.
Both ways added in the below code. First, where the contact number is last column. And the second, where all td value have class name.
// First way
var contactNumbers= []
$("#example tbody tr").each(function() {
contactNumbers.push($(this).find("td:last-child").html());
});
console.log("If Contact number column is on last"+contactNumbers.join())
// Second way
var contactNumbers1= []
$(".cnTd").each(function(i){
contactNumbers1.push($(this).text())
})
console.log("Contact numbers by class"+contactNumbers1.join())
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<table class="table" id="example">
<thead>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Email</th>
<th>Contact Number</th>
</tr>
</thead>
<tbody>
<tr>
<td>John</td>
<td>Doe</td>
<td>john#example.com</td>
<td class="cnTd">5675677567</td>
</tr>
<tr>
<td>Mary</td>
<td>Moe</td>
<td>mary#example.com</td>
<td>90987786756</td>
</tr>
<tr>
<td>July</td>
<td>Dooley</td>
<td>july#example.com</td>
<td>3455657457</td>
</tr>
</tbody>
</table>
</div>
Now you you send the collected values to controller using hidden form value or by sending ajax request or by query params. At contoller side simply use split(',') or tokenize(',') method to get list of numbers.
Hope this will helps you.

Jenkins pipeline script to send customized email

I've been trying to use my customized content for the Jenkins build emails. I got stuck when I am trying to change the contents of html dynamically based on the results from previous stages. I am passing the contents of an html to a variable as below and when i try to access the hash list in that, the value of arrays(key and value of an array) are not getting printed.
def content = """\
<html>
<head>
<style>
</style>
</head>
<body>
<table style=" background-color:lightgreen; width:900px;margin:0;">
<tr>
<th>Build Results :</th>
</tr>
<tr>
<td>project Name : </td>
<td>project URL : </td>
</tr>
<tr>
<td>Build Number : ${var3} </td>
</tr>
<tr>
<td>Buid URL :</td>
</tr>
</table>
<table style=" background-color:lightblue; width:900px;margin:0;">
<tr>
<% stagearray.each { item ->
def key=item.key;
def value=item.value; %>
<td>${key}</td>
<td>${value}</td>
<% } %>
</tr>
this is the sample
<tr><td>This is test line </td></tr>
</table>
</body>
</html>
"""
Any help would be highly appreciated.

Html table not populating/rendering

I am new in ruby on rails and I am creating my first ruby on rails project. I created a html view with embedded ruby codes that will display a table with the following headings: Patient, Room/Bed, Covering OT/PT. Under those headings, the patient name, corresponding room/bed and OT/PT will be displayed. But when the codes run, it do not render the patient name, room/bed and covering OT/PT. The table headings render but not the patient name, room/bed, and covering OT/PT. Any codes within this ruby block <% #units.each do |un| %> ... <%end%> apparently are not executed even if I put a ruby code like <%= Mr. Jones %>. I am not sure what to do. Any help and advice is greatly appreciated. Here is the html code:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Project</title>
<meta name="description" content="Project1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- <link rel="shortcut icon" href="/favicon.ico"> -->
<meta name="author" content="David West">
<link rel="icon" type="img/ico" href="/assets/images/jhu_tic.ico">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400">
<link rel="stylesheet" href="/css/enterprise-auth.min.css">
<div class="bar-header">
<div class=label>
<div class=app-label>Project | </div>
<div class=view-label>Therapist</div>
</div>
<div class="date">Today is <%= Time.now.to_date %></div>
</div>
</div>
<div class="main-page">
<% #units.each do |un| %>
<div class="patient-queue-wrapper">
<div class="queue-header">Daily Tx and other patients with OT/PT lag 2+ days</div>
<table class="mdl-data-table mdl-js-data-table mdl-shadow--2dp fixed-table-header">
<thead>
<tr>
<th class="mdl-data-table__cell--non-numeric">Patient Name</th>
<th class="mdl-data-table__cell--non-numeric">Room/Bed</th>
<th>OT/PT Lag</th>
<th>OT/PT AMPAC</th>
<th class="mdl-data-table__cell--non-numeric">Covering OT/PT</th>
</tr>
</thead>
<tbody class="table-body scrollable-body">
<% un.patients.each do |patient| %>
<% if patient.lag_time_approaching_thresh %>
<tr>
<td class="mdl-data-table__cell--non-numeric"><%= patient.name %></td>
<td class="mdl-data-table__cell--non-numeric"><%= patient.room_bed %></td>
</tr>
<% end %>
<% end %>
</tbody>
</table>
</div>
<%end%>
</div>
</head>
</html>
Here is the codes showing the #unit variable inside the DashboardsController:
class DashboardsController < ApplicationController
def therapist
#patients = Patient.all.includes(:pt_priority, :ot_priority, orders: [visi$]
#units = Unit.all
end
def therapist_all_units
#units = Unit.all
end
def therapist_unit
#unit = Unit.find(params[:id])
# use the link-to helper methods
end
def manager
end
The code inside the tbody block will not execute if un.patients returns empty? or nil
This will be why nothing you place inside that block will display
If you place an simple html tag inside that block it won't appear e.g.
<tbody class="table-body scrollable-body">
<% un.patients.each do |patient| %>
<h1> If un.patients is then nothing in here will display </h1>
<% if patient.lag_time_approaching_thresh %>
<tr>
<td class="mdl-data-table__cell--non-numeric"><%= patient.name %></td>
<td class="mdl-data-table__cell--non-numeric"><%= patient.room_bed %></td>
</tr>
<% end %>
<% end %>
</tbody>
This is because there is no data in un.patients.
Now then, why there is no data is an entirely different question.
Check your association in the console run from the command line inside the root folder of your application.
$ rails c
You can use the console to interact with your models to interrogate your data and your model structures
e.g.
Patient.first.unit
you may find that the above returns nil when you are expecting a unit to return
I suggest you look very closely at your data and in particular the relationships between unit and patient and you will probably find that there is nothing wrong with your form
You could also add a check in the html form for this condition
<% if un.patients.empty? %>
<h2> Sorry, there are no patients for this unit </h2>
<%else%>
<tbody class="table-body scrollable-body">
<% un.patients.each do |patient| %>
<% if patient.lag_time_approaching_thresh %>
<tr>
<td class="mdl-data-table__cell--non-numeric"><%= patient.name %></td>
<td class="mdl-data-table__cell--non-numeric"><%= patient.room_bed %></td>
</tr>
<% end %>
<% end %>
</tbody>
<%end%>
You might want to sort out the code indentation to make it more readable

JSPDF-Autotable colspan/rowpan issue

I have an html table with rowspan/colspan.I am using jspdf and jspdf-autotable for exporting that html table to pdf. However the pdf getting saved has a table which doesn't contain rowspan/colspan in actual table.How to do colspan/rowspan using jspdf-autotable?
My current code is
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title id='title'>HTML Page setup Tutorial</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.debug.js"></script>
<script src="https://rawgit.com/someatoms/jsPDF-AutoTable/master/dist/jspdf.plugin.autotable.js"></script>
<script type="text/javascript">
function myFunction()
{
var doc = new jsPDF('p', 'pt');
var res = doc.autoTableHtmlToJson(document.getElementById("my-table"));
doc.autoTable(res.columns, res.data, {startY: 40});
doc.save("Report.pdf");
}
</script>
</head>
<body>
<table border='1' id="my-table">
<thead>
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan='2'>D</td>
<td colspan='2'>$100</td>
</tr>
<tr>
<td >E</td>
<td >F</td>
</tr>
</tbody>
</table>
<button type="button" onclick="myFunction()">Click Me!</button>
</body>
</html>
EDIT: Version 3 of the library supports rowspans and colspans, no hacks needed
The plugin doesn't support to automatically port colspans and rowspans from html. However you can do it manually. Check out this example (a demo is here).
In the meantime the plugin seems to support parsing the colspans from HTML. This should work:
<td colspan="2">Colspan</td>

Resources