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  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Helpermethoden im Model
BeitragVerfasst: 05 Jul 2013, 09:38 
Offline
Schüler

Registriert: 01 Mai 2013, 18:34
Beiträge: 24
Hallo alle zusammen.

Ich brauch später die selben Methoden jeweils im Model und in der View. Jetzt hab ich gelesen dass das nicht so toll wäre die Helpermethoden im Model zur Verfügung zu stellen. Die Methoden aber im Model zur Validierung und später in der View niederzulegen scheint mir aber auch nicht richtig da ich mich ja wiederholen müsste. Welchen Weg gibt es denn noch den man gehen kann. Ich bin leider noch nicht so lange dabei.Falls ich die Helpermethoden auch im Model zwecks Validierung verwenden sollte, wie stelle ich das denn an?

Dann noch eine vielleicht etwas speziellere Frage zur nested_form-gem. Merkwürdigerweise greift meine Validierung nicht richtig sobald ich alle werte einfach leer lasse oder überall eine 0 eintrage. Eine 00 validiert er wiederrum.

Ich habe ein Model-Array und nur das Model an der Stelle 0 ist betroffen. Wenn er garnicht validieren würde wäre es ja noch ok aber er reagiert nur nicht auf die 0.

Das hier steht im Model drin:


1
2
validates :prozent,
:numericality => { :greater_than => 0, :less_than => 10 }


Jetzt hab ich ein Array dieses Models und frage den Fehlerfall in der View so ab:




<% if recipe.buendels[index].errors[:prozent].present? %>


Das index kommt zustande wegen:



1
2
3
4
5
6
<% recipe.buendels.each.with_index do |buendels,index| %>
<%= f.fields_for :buendels, buendels do |bundle_form| %
>

<%= render 'buendel_fields', bundle_form: bundle_form, index: index, recipe: recipe %>
<% end %>
<% index
=
-1 %>
<% end %>


Hoffe es ist nicht schlimm das ich direkt wieder mit 2 Fragen daher komme.

Thanks im Vorraus.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Helpermethoden im Model
BeitragVerfasst: 05 Jul 2013, 11:12 
Offline
Interpreter

Registriert: 10 Dez 2007, 17:37
Beiträge: 1906
Hast du mal ein Beispiel, was du damit meinst, dass du die gleiche Methode im view und im Model brauchst?
Im View kannst du doch auf alle Methoden des Models zugreifen. Was du im Model nicht machen sollst,
ist View-Depenet Code erzeugen. Z.b. das eine Model Methode html-Code formatiert.





<% index = -1 %>


hat keine Auswirkung, da der Index mit dem nächsten Durchlauf neu gesetzt wird und kein weiterer Code nach der Zeile kommt.




if recipe.buendels[index].errors[:prozent].present?


kannst du auch so schreiben:




if recipe.buendels[index].errors.include?(:prozent)


Du kannst doch das aktuelle bundle direkt in dein Partial als lokal mit übergeben,
dann brauchst du den index Zugriff nicht mehr.

... um was genaueres zu deinem Problem sagen zu können, müsstest du schon etwas mehr aus dem Partial posten.

_________________
Grüße
Jack


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Helpermethoden im Model
BeitragVerfasst: 05 Jul 2013, 12:55 
Offline
Schüler

Registriert: 01 Mai 2013, 18:34
Beiträge: 24
Danke erstmal für die rasche Antwort.

Ich programmiere eine Art Rezeptbuch. Ich brauche die gleichen Methoden im Model wie auch in der View ich vor der Speicherung überprüfen muss ob das Rezept überhaupt anwendbar ist. Das heißt, harmonieren die einzelnen Rezeptbestandteile miteinander? Tritt der Fall ein dass das Rezept nicht anwendbar ist so kann das Programm eingreifen und eine Art Autokorrektur vornehmen. Dabei werden in der View die kritischen Werte abgeändert und makiert. Das ist kein Problem. Wenn ich mich in der Show befinde möchte ich erneut Rechnen(selbe Methoden wie bei der Validierung) und das Ergebnis mittels JQuery einblenden.

Ja stimmt.. Ich könnte das aktuelle bundle mitgeben.. Weiß nicht wieso ich das nicht gemacht hab...

Wieso ich da jetzt <% index = -1 %> stehen hab.. Schau dir das _hersteller.html.erb an. Dort wird der index benutzt. Setze ich den index nicht unter 0 so wird das falsche Konstrukt gewählt.

Also ich kopiere jetzt einfach mal alles ohne groß etwas abzuändern. Hoffe mir wird verziehen.



1
2
3
4
5
6
<% recipe.aromenbuendels.each.with_index do |aromenbuendels,index| %>
<%= f.fields_for :aromenbuendels, aromenbuendels do |bundle_form| %
>

<%= render 'aromenbuendel_fields', selectable_aromas: @selectable_aromas, selectable_aromaherstellers: @selectable_aromaherstellers, bundle_form: bundle_form, index: index, recipe: recipe %>
<% end %>
<% index
=
-1 %>
<% end %>


_aromenbuendel_fields.html.erb


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Hersteller
<div id="hersteller", class="span12">
<%= render 'hersteller', selectable_aromaherstellers: @selectable_herstellers, bundle_form: bundle_form, index: index %>
</div>

<% if recipe.aromenbuendels[index].errors[:prozent].present? %>
<div class
=
"control-group error">
<span class="control-label" for="inputError">Prozent</span><br/>
<%= bundle_form.text_field :prozent, :class => "span12", :placeholder => "0.0" %>
</div>
<% else %>
Prozent
<%= bundle_form.text_field :prozent, :class => "span12", :placeholder => "0.0" %>
<% end %>
<% if index != 0 %>
<%= bundle_form.link_to_remove "L��schen", :class => "btn btn-danger", :id => "entfernenButton" %>
<% end %>


_hersteller.html.erb


1
2
3
4
5
6
7
8
9
10
11
<% if index >= 0 %>
<% if @recipe.aromenbuendels[index].aroma_id != nil %>
<% if @recipe.aromenbuendels[index].aroma.aromahersteller.id != nil %
>

<%= collection_select(:post, :id, @selectable_aromaherstellers, :id, :name, {:prompt => "Nicht gew��hlt", :selected => @recipe.aromenbuendels[index].aroma.aromahersteller.id}, {:id => 'herstellers_select', :class => "span12"}) %>
<% end %>
<% else %>
<%= collection_select(:post, :id, @selectable_aromaherstellers, :id, :name, {:prompt => "Nicht gew��hlt"}, {:id => 'herstellers_select', :class => "span12"}) %>
<% end %>
<% else %>
<%= collection_select(:post, :id, @selectable_aromaherstellers, :id, :name, {:prompt => "Nicht gew��hlt"}, {:id => 'herstellers_select', :class => "span12"}) %>
<% end %>


Irgendwie speichert der zwar das Bundle aber ohne die Validierung vorzunehmen. In der Datenbank findet sich auch das Bundle. Was auffällt ist das die Validierung richtig greift sobald ich irgendeinen Wert im Bundle setze. Nur bei der Eingabe von 0 greift er nicht und das nur beim Bundle[0]. Beim Bundle[1] und mehr funktioniert alles wie gedacht.


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

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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