ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: 14 Nov 2005, 22:10 
Offline
Obfuscator
Benutzeravatar

Registriert: 23 Okt 2005, 13:38
Beiträge: 571
Wohnort: Bern (CH)
Hallo alle

An diversen Stellen in meinem Code will ich überprüfen, ob sich der Benutzer eingeloggt hat (dann ist session[:user] != nil). Dazu will ich aber nicht jedes Mal session[:user] auf nil überprüfen, sondern möchte eine Methode definieren, welche dies übernimmt:



1
2
3
def user_logged_in?
session[:user]
end


Wo kann ich diese Methode einbauen bzw. wo befindet sich das Session Objekt?

Danke und Grüsse
Josh

_________________
www.josh.ch - Personal Web
www.incense.ch - Web development (to come)
www.ayom.com - Professionelles deutschsprachiges Webmaster Portal

"Eine Uhr, die stehen bleibt, zeigt 2x täglich die korrekte Uhrzeit an. Das ist besser als eine Uhr, die falsch geht." :-)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 14 Nov 2005, 22:12 
Offline
Ex-Admin
Benutzeravatar

Registriert: 12 Mai 2003, 18:49
Beiträge: 890
Wohnort: Kiel
Moin!

Wäre es nicht sinnvoller, dir eine User oder Besucherklasse zu bauen und diese in der Session zu speichern?

Johannes

_________________



# Kein Kommentar!!


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 14 Nov 2005, 22:18 
Offline
Obfuscator
Benutzeravatar

Registriert: 23 Okt 2005, 13:38
Beiträge: 571
Wohnort: Bern (CH)
Ich habe ein Modell "user" mit Username, PW etc. Beim Einloggen wird eine Instanz dieses Modells in session[:user] gespeichert.
Das meinst du doch, oder?

_________________
www.josh.ch - Personal Web
www.incense.ch - Web development (to come)
www.ayom.com - Professionelles deutschsprachiges Webmaster Portal

"Eine Uhr, die stehen bleibt, zeigt 2x täglich die korrekte Uhrzeit an. Das ist besser als eine Uhr, die falsch geht." :-)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 15 Nov 2005, 01:01 
Offline
Böser Admin 2
Benutzeravatar

Registriert: 17 Mär 2004, 17:03
Beiträge: 2544
Wohnort: Berlin
klingt nach einem job für app\helpers\application_helper.rb!

_________________
Ruby-Mine | (almost) murphy.de | rubychan.de


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 15 Nov 2005, 10:56 
Offline
Obfuscator
Benutzeravatar

Registriert: 23 Okt 2005, 13:38
Beiträge: 571
Wohnort: Bern (CH)
murphy hat geschrieben:
klingt nach einem job für app\helpers\application_helper.rb!

Stimmt, das wäre wohl eine Möglichkeit. Aber wäre es nicht "schöner", die Methode dem Sessionobjekt direkt zu geben?

_________________
www.josh.ch - Personal Web
www.incense.ch - Web development (to come)
www.ayom.com - Professionelles deutschsprachiges Webmaster Portal

"Eine Uhr, die stehen bleibt, zeigt 2x täglich die korrekte Uhrzeit an. Das ist besser als eine Uhr, die falsch geht." :-)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 15 Nov 2005, 19:55 
Offline
Böser Admin 2
Benutzeravatar

Registriert: 17 Mär 2004, 17:03
Beiträge: 2544
Wohnort: Berlin
dann musst du eine erweiterung schreiben, die dann in lib/ packen und im environment.rb laden. ich habe so zB eine variante von ActiveRecord::Base erstellt, die auf die felder name und id reagiert:

1
2
3
4
5
6
7
8
module ActiveRecord
class NameOrIdBase < Base
...
def self.find! id, *args
find_by_id(id, *args) || find_by_name(id, *args)
end
end
end
lib/name_or_id_base.rb


1
2
# A model that uses names as ids.
require 'name_or_id_base'
config/environment.rb

nachteil: änderungen in der datei machen einen server-neustart notwendig.

_________________
Ruby-Mine | (almost) murphy.de | rubychan.de


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 16 Nov 2005, 14:00 
Offline
Obfuscator
Benutzeravatar

Registriert: 23 Okt 2005, 13:38
Beiträge: 571
Wohnort: Bern (CH)
murphy hat geschrieben:
dann musst du eine erweiterung schreiben, die dann in lib/ packen und im environment.rb laden. ich habe so zB eine variante von ActiveRecord::Base erstellt, die auf die felder name und id reagiert:

1
2
3
4
5
6
7
8
module ActiveRecord
class NameOrIdBase < Base
...
def self.find! id, *args
find_by_id(id, *args) || find_by_name(id, *args)
end
end
end
lib/name_or_id_base.rb


1
2
# A model that uses names as ids.
require 'name_or_id_base'
config/environment.rb

nachteil: änderungen in der datei machen einen server-neustart notwendig.


Danke dir. Werde das mal ausprobieren. :-)

_________________
www.josh.ch - Personal Web
www.incense.ch - Web development (to come)
www.ayom.com - Professionelles deutschsprachiges Webmaster Portal

"Eine Uhr, die stehen bleibt, zeigt 2x täglich die korrekte Uhrzeit an. Das ist besser als eine Uhr, die falsch geht." :-)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 16 Nov 2005, 16:24 
Offline
Obfuscator
Benutzeravatar

Registriert: 23 Okt 2005, 13:38
Beiträge: 571
Wohnort: Bern (CH)
OK, mit meinen spärlichen Ruby Kenntnissen habe ich folgendes gezaubert (ich weiss, der Code bedarf einiger Vereinfachungen und Korrekturen):



1
2
3
4
5
6
7
8
9
10
11
module ActiveController
class MySession < ActiveController::Session

def user_logged_in?
if user
return true
else
return false
end
end
end

lib/my_session.rb

Nochmals zur Erinnerung: die Methode soll überprüfen, ob die Instanz der Klasse ein Attribut namens user enthält, und wenn ja, soll sie true zurückgeben. Sonst natürlich false.

Wo/Wie muss ich dies nun in config/environment.rb einfügen? Und ist die Methode user_logged_in? nun tatsächlich in jedem session Objekt eines Controllers verfügbar? Kann ich mir nicht vorstellen, ich habe hier jetzt doch einfach eine neue Klasse erstellt? Diese müsste ich nun doch anstelle der Session Klasse in Rails standardmässig einschleusen?

_________________
www.josh.ch - Personal Web
www.incense.ch - Web development (to come)
www.ayom.com - Professionelles deutschsprachiges Webmaster Portal

"Eine Uhr, die stehen bleibt, zeigt 2x täglich die korrekte Uhrzeit an. Das ist besser als eine Uhr, die falsch geht." :-)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 16 Nov 2005, 16:38 
Offline
Böser Admin 2
Benutzeravatar

Registriert: 17 Mär 2004, 17:03
Beiträge: 2544
Wohnort: Berlin
so vielleicht:

1
2
3
4
5
6
7
module ActiveController
class Session
def user_logged_in?
!!user
end
end
end
(!! ist ein hack den ich grad entdeckt habe: not-not, macht einfach ein boolean aus dem argument)

diese datei jetzt zB unter lib/session_support.rb speichern und dann in der environment.rb per require aufrufen. da drin steht auch ein kommentar "# Include your app's configuration here:"

das 'lib/' kannst du dabei weglassen, weil Rails automatisch im lib-verzeichnis sucht.

_________________
Ruby-Mine | (almost) murphy.de | rubychan.de


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 16 Nov 2005, 16:43 
Offline
Obfuscator
Benutzeravatar

Registriert: 23 Okt 2005, 13:38
Beiträge: 571
Wohnort: Bern (CH)
Hui! Aber wird dabei nicht die Original-Session-Klasse überschrieben, und deren Methoden gehen verloren (hat das Ding überhaupt Methoden, oder ist es nur ein Base-Objekt?)?

_________________
www.josh.ch - Personal Web
www.incense.ch - Web development (to come)
www.ayom.com - Professionelles deutschsprachiges Webmaster Portal

"Eine Uhr, die stehen bleibt, zeigt 2x täglich die korrekte Uhrzeit an. Das ist besser als eine Uhr, die falsch geht." :-)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 16 Nov 2005, 16:48 
Offline
ri
Benutzeravatar

Registriert: 04 Okt 2005, 10:42
Beiträge: 740
Wohnort: Wien


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Bronko
def huhu
puts "huhu"
end
def haha
puts "wie lustig"
end
end

bronko = Bronko.new

bronko.huhu

class Bronko
def huhu
puts "huhu2"
end
end

bronko.haha
bronko.huhu

Ausgabe:

1
2
3
huhu
wie lustig
huhu2
Du kannst Klassenmethoden sowohl überschreiben, als auch neue hinzufügen. Selbst wenn sogar schon Objekte davon existieren.


Zuletzt geändert von Gekkonier am 16 Nov 2005, 16:50, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 16 Nov 2005, 16:48 
Offline
Obfuscator
Benutzeravatar

Registriert: 23 Okt 2005, 13:38
Beiträge: 571
Wohnort: Bern (CH)
Ok, hab das gemacht, und es wird auch korrekt included bei WEBrick Restart. Allerdings kommt beim Aufruf von session.user_logged_in? eine "undefined method" Exception... :?

_________________
www.josh.ch - Personal Web
www.incense.ch - Web development (to come)
www.ayom.com - Professionelles deutschsprachiges Webmaster Portal

"Eine Uhr, die stehen bleibt, zeigt 2x täglich die korrekte Uhrzeit an. Das ist besser als eine Uhr, die falsch geht." :-)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 16 Nov 2005, 16:49 
Offline
Obfuscator
Benutzeravatar

Registriert: 23 Okt 2005, 13:38
Beiträge: 571
Wohnort: Bern (CH)
Gekko hat geschrieben:


1
2
3
class Bronko
...
bronko.huhu

Du kannst Klassenmethoden sowohl überschreiben, als auch neue hinzufügen. Selbst wenn sogar schon Objekte davon existieren.


Danke für den Hinweis! Daher sollte es an sich gehen (meine obere Antwort), aber leider tut es das nicht. ;-)

_________________
www.josh.ch - Personal Web
www.incense.ch - Web development (to come)
www.ayom.com - Professionelles deutschsprachiges Webmaster Portal

"Eine Uhr, die stehen bleibt, zeigt 2x täglich die korrekte Uhrzeit an. Das ist besser als eine Uhr, die falsch geht." :-)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 16 Nov 2005, 17:13 
Offline
ri
Benutzeravatar

Registriert: 04 Okt 2005, 10:42
Beiträge: 740
Wohnort: Wien
Josh hat geschrieben:
Danke für den Hinweis! Daher sollte es an sich gehen (meine obere Antwort), aber leider tut es das nicht. ;-)

Sorry, dann kann ich leider auch nicht helfen. Hab mir grad mal die Rails gems heruntergeladen :roll:
Gemacht hab ich damit noch garnix. Ich lerne lieber zuerst Ruby, bevor ich mir Rails antue.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 16 Nov 2005, 18:09 
Offline
Böser Admin 2
Benutzeravatar

Registriert: 17 Mär 2004, 17:03
Beiträge: 2544
Wohnort: Berlin
offenbar musst du die klasse CGI::Session überschreiben.

_________________
Ruby-Mine | (almost) murphy.de | rubychan.de


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: