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  [ 9 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 23 Aug 2005, 17:20 
Offline
Geselle
Benutzeravatar

Registriert: 14 Aug 2005, 23:03
Beiträge: 120
Wohnort: Stuttgart
hi... ich bekomms einfach ned hin bei rails ne validierung zu machen ...

follgende situation: 2 Models und 1 Controller

Model 1 Posts
Model 2 Comments
Controller Blog



comment.rb


1
2
3
4
5
6
7
8
9

class Comment < ActiveRecord::Base
belongs_to :post
validates_presence_of :message, :title

#in den Views bzw. im Layout muss der fehler noch angezeigt werden
#allerdings wird verhindert das leere eintraege in die datenbank gemacht werden

end


post.rb


1
2
3
4
5
6

class Post < ActiveRecord::Base
validates_presence_of :title, :message
has_many :comments

end


blog_controller.rb (relevante ausschnitt)


1
2
3
4
5
6
7
8
9
10
11
12

def write_comment
Post.find(params[:id]).comments.create(params[:comment])
flash[:notice] = "Kommentar erfolgreich hinzugefuegt"
redirect_to :action => "show", :id => params[:id]
end

def add_comment
@post = Post.find(params[:id])
@comment = Comment.new
end
end


und das formular das ich validieren moechte

add_comment.rhtml



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

<%= error_messages_for("comment") %>

<%
=
form_tag :action => "write_comment", :id => @post %>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td>Name: </td>
<td><%= text_field "comment", "name" %><
/
td>
<tr>
<tr>
<td>Title: </td>
<td><%= text_field "comment", "title" %><
/
td>
</tr>
<tr>
<td>Kommentar: <
/
td>
<td><%= text_area "comment", "message" %></td>
</tr>
<tr>
<td colspan
=
"2"><hr/></td>
<
/
tr>
<tr>
<td></td>
<td><%= submit_tag "Comment!" %><
/
td>
</tr>
<
/
table>
<%= end_form_tag %>


ich hoffe von euch kann mir einer erklaeren wie man so validierungen vornimmt...

beim post model reicht das validates_presence_of :blub, :usw
aus ... beim comment model wird lediglich verhindert das es in die DB geschrieben wird ... aber es wird kein fehler angezeigt

danke schonmal

TDO


Nach oben
 Profil  
 
BeitragVerfasst: 23 Aug 2005, 23:18 
Offline
Interpreter
Benutzeravatar

Registriert: 05 Jun 2005, 01:54
Beiträge: 3225
[TDO] hat geschrieben:
ich hoffe von euch kann mir einer erklaeren wie man so validierungen vornimmt...


Was meinst du mit Validierung? Ein Test ob der Wert vorhanden ist oder ob der Wert z.b. nur aus Zahlen besteht?

[TDO] hat geschrieben:
beim comment model wird lediglich verhindert das es in die DB geschrieben wird ... aber es wird kein fehler angezeigt


Wie meinst du das? Es wird von Rails verhindert dass die Werte in die DB geschrieben werden oder willst du das schreiben in die DB verhindern?


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 24 Aug 2005, 00:12 
Offline
Geselle
Benutzeravatar

Registriert: 14 Aug 2005, 23:03
Beiträge: 120
Wohnort: Stuttgart
ja ich moechte eine fehlermeldung angezeigt bekommen wenn die felder die im comment model angegeben sind leer sind ... momentan wird durch das: validates_presence_of verhindert das etwas in die datenbank geschrieben wird wenn eines dieser felder leer ist (was so ja auch richtig ist) nur haette ich dazu noch gerne die Rails Typische fehlermeldung angezeigt :-/

und die will irgendwie ned erscheinen

gruesse TDO


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 24 Aug 2005, 11:37 
Offline
Böser Admin 2
Benutzeravatar

Registriert: 17 Mär 2004, 17:03
Beiträge: 2544
Wohnort: Berlin
ich vermute, dass du Rails sagen musst, dass er prüfen woll, ob das speichern geklappt hat.
scaffold erzeugt sowas:

1
2
3
4
5
6
7
8
9
10
        def update
@category = Category.find(params[:id])
if @category.update_attributes(params[:category])
flash[:notice] = 'Category was successfully updated.'
flash[:color] = 'green'
redirect_to :action => 'list', :id => @category
else
render :action => 'edit'
end
end


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 24 Aug 2005, 11:59 
Offline
Geselle

Registriert: 05 Mai 2005, 14:15
Beiträge: 107
Die Variable @comment muss im View gesetzt sein.

z.B.:


1
2
@comment = Comment.new(@params[:comment])
Post.find(params[:id]).comments << @comment


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 24 Aug 2005, 12:04 
Offline
Geselle

Registriert: 05 Mai 2005, 14:15
Beiträge: 107
Ach ja, und nochwas, nachdem der Fehler aufgetreten ist solltest du nicht redirecten, sondern dasselbe Formular nochmal zeigen, so wie in murphys Beispiel


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 26 Aug 2005, 12:13 
Offline
Geselle
Benutzeravatar

Registriert: 14 Aug 2005, 23:03
Beiträge: 120
Wohnort: Stuttgart
danke fuer die gute erklaerung werd mir ActiveRecord nochmla genauer ansehen und es mal ausprobieren ...

gruesse TDO


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 06 Sep 2005, 17:08 
Offline
Geselle
Benutzeravatar

Registriert: 14 Aug 2005, 23:03
Beiträge: 120
Wohnort: Stuttgart
hi, ich bins nochmal...

also das ganze will einfach ned ... ich hab nu verstanden warum der fehler kam und habs nu auch geaendert ... aber der fehler wird immernoch nicht dargestellt ... ich begreife es einfach nicht ... und auch flash[:notice] wird ned dargestellt vielleicht koennt ihr euch das nochmal ansehen...

blog_controller.rb


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

def add_comment
@post = Post.find(params[:id])
@comment = Comment.new
end
######################

def write_comment

# das geht bestimmt auch nen wenig eleganter

@post = Post.find(params[:id]).id
@comment = Comment.new(params[:comment])
@comment.post_id= @post

if @comment.save
flash[:notice] = "Kommentar erfolgreich hinzugefuegt"
redirect_to :action => "show", :id => params[:id]
else
redirect_to :action => "add_comment", :id => params[:id]
end

end


dann das formular zum comment schreiben:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27


<%= error_messages_for(:comment) %>

<%
=
form_tag :action => "write_comment", :id => @post %>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td>Name: </td>
<td><%= text_field "comment", "name" %><
/
td>
<tr>
<tr>
<td>Title: </td>
<td><%= text_field "comment", "title" %><
/
td>
</tr>
<tr>
<td>Kommentar: <
/
td>
<td><%= text_area "comment", "message" %></td>
</tr>
<tr>
<td colspan
=
"2"><hr/></td>
<
/
tr>
<tr>
<td></td>
<td><%= submit_tag "Comment!" %><
/
td>
</tr>
<
/
table>
<%= end_form_tag %>


wo genau liegt hier der fehler das der fehler ned angezeigt wird jetzt redirecte ich doch zurueck und so weiter...

hoffe es kann mir hier jemand erklaeren.

danke.

TDO


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 06 Sep 2005, 17:34 
Offline
Böser Admin
Benutzeravatar

Registriert: 29 Jul 2005, 22:41
Beiträge: 2065
Wohnort: Beijing
Nicht so:


1
2
3
4
5
6
if @comment.save
flash[:notice] = "Kommentar erfolgreich hinzugefuegt"
redirect_to :action => "show", :id => params[:id]
else
redirect_to :action => "add_comment", :id => params[:id]
end


sondern so:


1
2
3
4
5
6
if @comment.save
flash[:notice] = "Kommentar erfolgreich hinzugefuegt"
redirect_to :action => "show", :id => params[:id]
else
render :action => "add_comment"
end


Erklärung:
Wenn du innerhalb eines Controllers einen Redirect machst dann werden sämtliche Variablen neu initialisiert. Da du aber die Infos aus dem Kommentar brauchst darfst du halt nur neu rendern.



der
Daniel


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 7 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:
cron