Ricardo Furgeson
2006-Jul-21 18:14 UTC
[Rails] Newbie Question about Ruby on rails---cant upload data
Hi everybody,
Ruby on Rails is my first programming lenguage...it looks to me like
i''m
missing the big picture. I''m trying to upload a file into a database.
In my app. my user needs to select a file and upload it...however I only
want him to upload certain information from that file. I have written
code to parse only string tables from that file. For example, the table
could look like this:
"hello" = "hello world"
"sayHIgh" = "Saying hello to the world"
To parse it, I have done this in a regular ruby class (and it works!):
class Parser
table = { }
IO.foreach(''Localizable.strings'') { |line|
if line =~ /^ \s* " (.*?) " \s* = \s* " (.*?) "/x
table[ $1 ] = $2
end
}
#puts table["StaplingTitle"]
p table
end
I have my view app. in views:
<h1>Importing Strings<h1>
<%= start_form_tag({:action => ''create''}, :multipart
=> true)%>
<p>
<b>Lenguage:</b><br/>
<%= select("variable", nil, @array_of_lenguages) %>
</p>
<p>
<b>Path: </b><br />
<%= file_field "description", "description"%>
</p>
<p><%= submit_tag "Import"%></p>
<%= end_form_tag%>
My view asks for the path of the file.
So here is my problem:
Since I''m new with programming, it seems kind of confusing. What
should
I do to accomplish a succesful load of those parsed keys-values into my
database?
What about the controller?
I know this is a newbie question, I really hope someone can help me out.
Thanks.
-Ferguson
--
Posted via http://www.ruby-forum.com/.
Ezra Zygmuntowicz
2006-Jul-21 18:36 UTC
[Rails] Newbie Question about Ruby on rails---cant upload data
On Jul 21, 2006, at 11:13 AM, Ricardo Furgeson wrote:> > So here is my problem: > > Since I''m new with programming, it seems kind of confusing. What > should > I do to accomplish a succesful load of those parsed keys-values > into my > database? > > What about the controller? > > I know this is a newbie question, I really hope someone can help me > out. > > Thanks. > > -FergusonHey Fergeson- Let''s see if we can get you going in the right direction here. You Are most of the way there since you have your parser and view already. You need a database table, a model for that table and a controller to get data from the view and stick it in the model. So first you need to create a migration for the db table. Lets call it localized_strings. So from inside of your rails app run this command: $ script/generate model LocalizedString That will create a file in RAILS_ROOT/db/migrate/ 001_create_localized_strings.rb . Put this inside of it: class CreateLocalizedStrings < ActiveRecord::Migration def self.up create_table : localized_strings do |t| t.column :key, :string t.column :value, :string end end def self.down drop_table : localized_strings end end Save that file and run rake migrate. You will now have a model called LocalizedString to hold your data in after you parse it. Lets make the view even simpler for now and just deal with the file upload <h1>Importing Strings<h1> <%= start_form_tag({:action => ''create''}, :multipart => true)%> <p> <b>Path: </b><br /> <%= file_field "localized_string", "data"%> </p> <p><%= submit_tag "Import"%></p> <%= end_form_tag%> Now you need a controller to handle the busy work. class MyController < ActionController::Base def create table = { } # params[: localized_string][:data] is a File or StringIO object when its a file upload params[: localized_string][:data].each_line do |line| if line =~ /^ \s* " (.*?) " \s* = \s* " (.*?) "/x table[ $1 ] = $2 end end # loop over key=>val pairs in table and create new model records from each one table.each do |key,val| LocalizedString.create(:key => key, :value => val) end end end That should get you where you need to go. Cheers- -Ezra