Forum: Rails Germany daten aus der datenbank holen

Posted by Hello Guy (jobber)
on 2009-02-23 12:31
Hallo,

ich habe eine klasse Patient. Ich möchte Daten der Patienten aus der
Datenbank
holen.
Ich stelle mir das so vor: Patient(mueller) => ausgewählte Daten (nicht
alle) wie Name, Geburtsdatum und Adresse werden geholt.

Wie kann ich diese Situation in Ruby realisieren?

lg
Posted by Benjamin Behr (Guest)
on 2009-02-23 12:46
(Received via mailing list)
patient = Patient.find_by_name('mueller')

wenn du das Feld "name" in deiner Tabelle "patients" hast.

Danach kannst du durch entsprechende Methodenaufrufe auf die einzelnen
Daten zugreifen:

patient.name # => 
Müllerpatient.geburtsdatum # => 23.02.2009

usw.

schöne grüße,benjamin

Am 23.02.2009 um 12:31 schrieb Hello Guy:
Posted by Rene Paulokat (Guest)
on 2009-02-23 13:01
(Received via mailing list)
On Mon, 23 Feb 2009 12:31:15 +0100
Hello Guy <lists@ruby-forum.com> wrote:

> Hallo,

hi,

> ich habe eine klasse Patient. Ich möchte Daten der Patienten aus der
> Datenbank
> holen.
> Ich stelle mir das so vor: Patient(mueller) => ausgewählte Daten (nicht
> alle) wie Name, Geburtsdatum und Adresse werden geholt.
> 
> Wie kann ich diese Situation in Ruby realisieren?

also mit ActiveRecord etwa so:

class Patient < ActiveRecord::Base
   composed_of :address_data, :mapping => [ %w(lastname lastname),
         %w(geburtsdatum geburtsdatum),
         %w(strasse strasse),
         %w(stadt stadt)]
end


data = Person.find(:first).address_data
data.strasse

das schafft dir ein 'subset' an daten der Patient-class
natuerlich muessen diese attribute auch in der Patient-class vorhanden
sein.

sieh dir das an:
http://api.rubyonrails.org/classes/ActiveRecord/Ag...

gruesse
rene
Posted by Hello Guy (jobber)
on 2009-02-23 20:01
danke für eure antworten, aber ich hab mich falsch ausgedrückt.

also die klasse patient befindet sich nicht in der anwendung selber 
sondern
ist ein separates programm patient.rb welches zugriff auf die datenbank 
haben
soll.

kann ich aus diesem programm patient.rb genauso auf die bestehende 
datenbank
zugreifen?

lg
Posted by Thomas Preymesser (Guest)
on 2009-02-23 20:11
(Received via mailing list)
2009/2/23 Hello Guy <lists@ruby-forum.com>:
> danke für eure antworten, aber ich hab mich falsch ausgedrückt.
>
> also die klasse patient befindet sich nicht in der anwendung selber
> sondern
> ist ein separates programm patient.rb welches zugriff auf die datenbank
> haben
> soll.
>
> kann ich aus diesem programm patient.rb genauso auf die bestehende
> datenbank
> zugreifen?

Ja, klar. Hast du das Buch 'Ruby Cookbook'? Dort ist ein Beispiel, wie
man ActiveRecord auch ohne Rails verwenden kann.

Prinzipiell:

Klasse Patient definieren

zu Datenbank verbinden
Schleife über alle einzulesenden Daten
  Alle Attribute in Patient belegen
  save aufrufen
bei Datenbank abmelden


-Thomas


--
Thomas Preymesser
thopre@gmail.com
http://thopre.googlepages.com/
http://thopre.wordpress.com/
Posted by Hello Guy (jobber)
on 2009-02-24 10:22
Thomas Preymesser wrote:
> Ja, klar. Hast du das Buch 'Ruby Cookbook'? Dort ist ein Beispiel, wie
> man ActiveRecord auch ohne Rails verwenden kann.
> 
> Prinzipiell:
> 
> Klasse Patient definieren
> 
> zu Datenbank verbinden
> Schleife �ber alle einzulesenden Daten
>   Alle Attribute in Patient belegen
>   save aufrufen
> bei Datenbank abmelden
> 
> 
> -Thomas
also das buch habe ich leider nicht.
Klasse patient ist ja schon definiert in Rails in Model patient.rb.

muss ich die verbindung zur datenbank auch noch mal in diesem 
separatesprogramm.rb herstellen, obwohl schon eine verbindung zur 
datenbank in database.yml vorhanden ist? eigentlich ja oder? oder darf 
ich die rails api mit dem separaten program nicht getrennt sehen?????

lg
Posted by Hello Guy (jobber)
on 2009-02-25 17:14
Hallo ich habe eine ganz andere frage:
ich kann die verbindung zur datenbank erstellen
[code]dbh = Mysql.real_connect("localhost", "arzu", "railswba", 
"eventserver_development")[/code]
aber ich möchte nicht wie hier nach den zeilen fragen und die anzahl 
ausgeben lassen,

[code]  # Erste Abfrage
  abfrage1 = dbh.query("SELECT name FROM animal WHERE name = 'tuna'")
  puts "Number of rows selected: #{dbh.affected_rows}"
 [/code]
sondern ich möchte den inhalt ausgeben lassen, mit welchem befehl kann 
ich dies bewerkstellen? gibt es eine seite mit all den befehlen dazu?

[code]

  abfrage1 = dbh.query("SELECT * FROM animal WHERE name = 'tuna'")
  puts "Number of rows selected: #{dbh.????}"  ##ausgabe von category


[code]

lg mykavun
Posted by Thomas Preymesser (Guest)
on 2009-02-25 17:41
(Received via mailing list)
2009/2/24 Hello Guy <lists@ruby-forum.com>:
>>   Alle Attribute in Patient belegen
>>   save aufrufen
>> bei Datenbank abmelden
>>
>>
>> -Thomas
> also das buch habe ich leider nicht.

ist aber sehr empfehlenswert, was alle möglichen Themengebiete rund um
Ruby anbelangt.

> Klasse patient ist ja schon definiert in Rails in Model patient.rb.

wenn es über ein separates Programm laufen soll, mußt du auch dort
Patient noch definieren.

>
> muss ich die verbindung zur datenbank auch noch mal in diesem
> separatesprogramm.rb herstellen, obwohl schon eine verbindung zur
> datenbank in database.yml vorhanden ist? eigentlich ja oder? oder darf
> ich die rails api mit dem separaten program nicht getrennt sehen?????

es läßt sich sicher auch in die Rails-Applikation integrieren, aber
wenn mir von einem separaten Programm ausgehen, mußt du dort auch die
Verbindung zu Datenbank selbst handeln (ist aber auch nicht weiter
schlimm).

Hier ist mal ein Skript von mir, das in etwa das gleiche macht, du
müßtest es halt darauf anpassen, daß der Input nicht von einer
Webseite sondern aus einer Datei kommt.

require 'rss/2.0'
require 'open-uri'
require 'date'

require 'rubygems'
require 'active_record'

def activerecord_connect
  ActiveRecord::Base.establish_connection(:adapter => "mysql",
:host => "localhost",
:username => "root",
:password => nil,
:database => "jobs")
end

activerecord_connect

class Posts < ActiveRecord::Base
end

url='http://berlin.kijiji.de/f-SearchAdRss?CatId=65'
feed = RSS::Parser.parse(open(url).read, false)
# puts "=== Channels: #{feed.channel.title} ==="
feed.items.each do |item|
  found = Posts.find_by_pubdate(item.pubDate.to_s)
  unless found
    puts item.title
    puts item.pubDate
    puts item.description

    # TODO: uninteressante immer wieder gepostete
    # Angebote generell als uninteressant markieren
    if item.title =~ / Franzosen / or
       item.title =~ /MA aus UK\/USA\/Irland /
      interesting = false
    else
      interesting = true
    end
    # Mon, 19 Jan 2009 13:43:55 +0100
    # puts Date.strptime(item.pubDate,'')
    s = item.pubDate.to_s
    d = ParseDate.parsedate(s)
    dd = DateTime.new(d[0],d[1],d[2],d[3],d[4],d[5])
    pubtime = dd
    post = Posts.create(:pubdate => item.pubDate.to_s,
                        :pubtime => pubtime,
                        :title => item.title,
                        :link => item.link,
                        :description => item.description,
                        :interesting => interesting)
    puts "gespeichert"
  end
end


-Thomas

--
Thomas Preymesser
thopre@gmail.com
http://thopre.googlepages.com/
http://thopre.wordpress.com/
Posted by Hello Guy (jobber)
on 2009-02-25 23:32
ich habe eine anfrage gestellt:

a = Patient.find_by_sql("SELECT ev.name, co.type FROM events AS ev JOIN 
competitions AS co ON ev.id = co.event_id")
    a.each do |row|
      puts "#{row[0]}\n"
    end

als ausgabe bekomme ich 4 leere zeilen (es treffen 4 sätze zu).
mache ich die ausgabe vielleicht falsch, oder wieso wird mir das 
ergebnis nicht angezeigt?

habe ich vielleicht etwas vergessen zu definieren?

lg
Posted by Hello Guy (jobber)
on 2009-02-25 23:33
> 
> -Thomas
> 
> --
> Thomas Preymesser
> thopre@gmail.com
> http://thopre.googlepages.com/
> http://thopre.wordpress.com/

danke dir für deine hilfsbereitschaft
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.