Displaying Data from a CSV file on the web using a rails framework.


First I'm assuming that you have your standard rails folder stucture from the assignment: Move into the project directory:

cd rails

Now let's create a new controller for the csv handling

[jsantore@csdev01 rails]$ ruby script/generate controller csvdemo index

You should see output like the following:

exists app/controllers/
exists app/helpers/
create app/views/csvdemo
exists test/functional/
create app/controllers/csvdemo_controller.rb
create test/functional/csvdemo_controller_test.rb
create app/helpers/csvdemo_helper.rb
create app/views/csvdemo/index.rhtml



Next start the webserver:

ruby script/server -p 3200

I'm starting it on port 3200 to avoid collisions with any of you.

Now lets look at the controller, open it up in xemacs or another code aware editor:

xemacs app/controllers/csvdemo_controller.rb&

You should see the following code

Original csvdemo_controller.rb

class CsvdemoController < ApplicationController

  def index
    }

  end
end


so you need to add in the code for dealing with CSV files that we talked about in class.

New csvdemo_controller.rb

require 'csv'
class CsvdemoController < ApplicationController

  def index
    @file = 'demoData.csv'
   
    @table={"headings" => ["Name", "Category", "City", "Rating"],
      "body" => CSV::Reader.parse(File.open(@file))
   
    }

  end
end


You will also need to edit the view file:
xemacs app/views/csvdemo/index.rhtml&
This also has the scriptlet code and ruby expressions that we discussed in class.

New index.rhtml


<h1>Csvdemo</h1>

<table>
  <tr>
    <% @table["headings"].each do |heading| %>
    <td>
      <b><%= heading %></b>
    </td>
    <%end %>
  </tr>

  <% @table["body"].each do |row| %>
    <tr>
      <% row.each do |col| %>
    <td>
      <%= col %>
    </td>
      <% end %>
    </tr>
  <% end %>

</table>


Finally you might be interested in the csv file that I was using to generate the file:

demoData.csv


this, that, Akron, 1
Old Man, folks, Dallas, 2
Slice em and Dice em, odd stuff, Detroit, 4
Roast em and Toast em, odd stuff, Boston, 3
Mango Bob's asian bistro, eatery, Buffalo, 1

Make sure that you have demoData.csv in the root rails directory or that you update the file name in the controller to include the directory path that you are using.

you can find more information about the Ruby CSV handler in Dan's presentation or at

http://www.ruby-doc.org/core/classes/CSV.html