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  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 30 Mär 2014, 22:44 
Offline
Novize

Registriert: 30 Mär 2014, 22:21
Beiträge: 10
Hi,

mit der Umstellung auf Rails 3 sollte man JQuery verwenden. Da die Nutzung von Prototyp ein Auslaufmodell ist, stelle ich gerade entsprechend um und scheiter an dem alten "observe_field".
Ich möchte das Feld "eingang" beobachten => dies funktioniert bis in den Controller.
Das Feld "faellig" (nur das Feld) soll einen entsprechenden Wert (aus dem Controller) erhalten.

Hier mein Code:

_form.html.erb


1
2
3
4
<%= form_for(@rechnung, :html => { :multipart => true }) do |f| %>
<%= f.text_field :eingang, :size => "10" %>
<%= f.text_field ::faellig, :size => "10" %>
<% end %>


application.js

1
2
3
4
5
6
7
  $('#rechnung_eingang').focusout(function(){
$('#rechnung_eingang').css("background-color","#FFFFFF"); // nur zur Kontrolle
var netID = $('#rechnung_eingang').val();
$.post("/rechnungs/set_faellig", { rechnung_eingang: $('#rechnung_eingang').val() }, function(html) {
$("#rechnung_faellig").html(html);
});
});


rechnungs_controller.rb


1
2
3
4
5
6
7
8
9
  def set_faellig
logger.info "ich bin RICHTIG"
params[:rechnung_faellig] = "01.01.2014"
respond_to do |format|
format.html # index.html.erb
format.json { render json: @users }
format.js
end
end


set_faellig.js.erb



  $("#rechnung_faellig").html("<%= escape_javascript(render(:partial => params[:rechnung_faellig])) %>");


Fehlermeldung:


1
2
3
4
5
6
7
8
9
10
11
12
Started POST "/rechnungs/set_faellig" for 127.0.0.1 at 2014-03-30 22:18:32 +0200
Processing by RechnungsController#set_faellig as */*
Parameters: {"rechnung_eingang"=>"2014-02-02"}
ich bin RICHTIG
Completed 500 Internal Server Error in 4ms

ActionView::MissingTemplate (Missing template rechnungs/set_faellig, application/set_faellig with {:handlers=>[:erb, :builder, :coffee], :formats=>[:html], :locale=>[:en, :en]}. Searched in:
* "/meine/Ruby/testprojekt/app/views"
):
app/controllers/rechnungs_controller.rb:6:in `set_faellig'

Rendered /usr/local/rvm/gems/ruby-1.9.3-p448/gems/actionpack-3.1.0/lib/action_dispatch/middleware/templates/rescues/missing_template.erb within rescues/layout (0.4ms)


Vielleicht seh ich den Wald vor lauter Bäumen nicht... Könnt Ihr hier helfen?


Zuletzt geändert von Quintus am 30 Mär 2014, 22:58, insgesamt 1-mal geändert.
Code-Tags eingefügt


Nach oben
 Profil  
 
BeitragVerfasst: 30 Mär 2014, 23:15 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Du wirst POST /rechnungs/set_faellig.js anfordern müssen, ansonsten versucht Rails die HTML-Variante auszuliefern.

Das ist zumindest jetzt mein schneller Schuss ins Blaue.

Aber bitte erlaube mir dich darauf hinzuweisen, dass Rails 3.0 und 3.1 ihr EOL erreicht haben und 3.2 wohl bald das gleiche Schicksal ereilen wird. Rails 4.0 ist aktuell und 4.1 hat bereits den ersten RC…

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
BeitragVerfasst: 31 Mär 2014, 21:16 
Offline
Novize

Registriert: 30 Mär 2014, 22:21
Beiträge: 10
Hm, lach, jetzt verwirrst Du mich noch mehr... Was meinst Du mit:
Zitat:
Du wirst POST /rechnungs/set_faellig.js anfordern müssen, ansonsten versucht Rails die HTML-Variante auszuliefern.


Mittels "post" sende ich von der View an den Controller. Aber wie gehts zurück mittels "post"?
Ich dachte, dafür sei die/meine Datei set_faellig.js.erb zuständig und dort vermute ich meinen Fehler.

Gibt es irgendwo auch gezielt Bücher hierfür? Leider finde ich immer nur "RoR" oder "JQuery", aber keins - wie damals - "Ajax on Rails"


Nach oben
 Profil  
 
BeitragVerfasst: 31 Mär 2014, 21:29 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Wenn du "/rechnungs/set_faellig" anforderst, geht RoR davon aus, dass du eine HTML-Datei zurückwillst, also muss du "/rechnungs/set_faellig.js" anfordern.

Du müsstest also, wenn ich deinen Code richtig überblicke in application.js die Änderung machen:


1
2
3
4
5
6
7
  $('#rechnung_eingang').focusout(function(){
$('#rechnung_eingang').css("background-color","#FFFFFF"); // nur zur Kontrolle
var netID = $('#rechnung_eingang').val();
$.post("/rechnungs/set_faellig.js", { rechnung_eingang: $('#rechnung_eingang').val() }, function(html) {
$("#rechnung_faellig").html(html);
});
});


Ob Rails 3 noch die Möglichkeit kennt per "format=js" im Query-String das Rückgabeformat anzugeben (oder ob auch das nur über ein GEM geregelt wurde als ich das mal brauchte) weiß ich leider gerade nicht.

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
BeitragVerfasst: 31 Mär 2014, 22:13 
Offline
Novize

Registriert: 30 Mär 2014, 22:21
Beiträge: 10
Hui, das wird ja noch komplizierter als ich bisher dachte auf JQueri umzusteigen :(

Ich komme von RoR2 mit Prototyp u. Ajax, habe null Wissen von Javascript (was auch immer dahinter stand - damals verstand ich es nichtmal). Mit meinem Buch Ajax on Rails kam ich voran, es war ausreichend für meine Funktionalität.
Versuche mich aktuelle mit RoR3 mit Javascript-JQuery und verstehe gerade nur noch Bahnhof :(
Welch Drama erwartet mich in RoR4?

Zurück zum Thema, bei RoR3 u. JQuery habe ich mich bisher an dem Railscast 205 (http://railscasts.com/episodes/205-unobtrusive-javascript?language=de&view=asciicast) mit der Funktionalität der Suche orientiert. So eine Suche funktioniert ja bei mir und dort gehts über die *.js.erb-Datei zurück in den View (hoffe man darf hier auch Websites posten?)

Als Alternative für das Observe-field hab ich von dieser Website (http://stackoverflow.com/questions/6523653/changing-from-observe-field-to-jquery-in-rails-3) übernommen.
Aber bei dieser Seite gibts nur Infos zu Javascript/JQuery, aber nicht zum Controller oder gar vom Controller zum View.
Daher hab ich mich dann an Railscast 205 orientiert und versuchs mit einer "Zwischendatei" "*.js.erb

Vielleicht lieg ich damit ja völlig falsch, das glaub ich gern, aber wo finde ich Fachlektüre hierfür? Ich lese mich gern ein, wenn ich wüsste wo?


Nach oben
 Profil  
 
BeitragVerfasst: 05 Apr 2014, 14:46 
Offline
Novize

Registriert: 30 Mär 2014, 22:21
Beiträge: 10
Ich habs :D ich bin zurück im View :D
Im Controller habe ich alle Formate ausser .js rausgenommen und schwups, war ich im View

Aber :( ohne gewünschtem Ergebnis
Das Feld, welches den Eintrag vom Controller erhalten soll (hier :rechnungs_faellig = "irgendwas" bzw. @bla = "irgendwas") bleibt leer.

Auch hab ich die set_faellig.js.erb etwas verändert:



 $("#rechnung_faellig").html("<%= escape_javascript(render(:partial => 'form', :locals => {:rechnung_faellig => @bla})) %>");


Anscheinend wollen alle im Netz immer nur die ganze Seite austauschen... ich möchte nur ein einzelnes Text_field ersetzt haben... und finde dazu nichts.


Zuletzt geändert von Quintus am 05 Apr 2014, 19:23, insgesamt 1-mal geändert.
Code-Tags eingefügt


Nach oben
 Profil  
 
BeitragVerfasst: 05 Apr 2014, 21:21 
Offline
Novize

Registriert: 30 Mär 2014, 22:21
Beiträge: 10
Nachdem ich den ganzen Tag im Netz gesucht und viel probiert habe komme ich leider nur auf kleinere halbe Ergebnisse.

Mein Ergebnis ist, dass aus dem Code der set_faellig.js.erb



  $("#rechnung_faellig").html("<%= escape_javascript(render(:partial => 'form', :locals => {:rechnung_faellig => @bla})) %>");

wurde nun statt html replaceWith:



  $("#rechnung_faellig").replaceWith("<%= escape_javascript(render(:partial => 'form', :locals => {:rechnung_faellig => :rechnung_faellig})) %>");


Ich hab auch versucht eine anderes partial aufzurufen. Füge ich dort ein einfaches "Bla" ein, so bekomm ich es an der richtigen Stelle als reintext zurück.
Ich möchte ja aber ein Text_field mit Inhalt. Füge ich in dieses andere Partial



 <%= f.text_field :faellig, :size => "10", value ... %>

ein, so erhalte ich leider auch nur eine Fehlermeldung.
Hier bleibt nur die Lösung über



 <%= text_field_tag :rechnung_faellig, params[:rechnung_faellig] %>


Im Controller muss ich dafür aber in der create und update die "tags" korrigieren.

Dies kann doch nicht die Lösung sein?


Nach oben
 Profil  
 
BeitragVerfasst: 06 Apr 2014, 17:22 
Offline
Novize

Registriert: 30 Mär 2014, 22:21
Beiträge: 10
Lach, das war auch nicht die Lösung :)
Jetzt funktionierts weitestgehend wie gewünscht, es wird das Text_field entsprechend um die Eingabe ergänzt, an der richtigen Stelle wiedergegeben usw.

ABER wenn ich ein Feld bereits um Eingaben verändert habe, kann ich es nicht mehr greifen.

Beispiel:
Eingabe von Netto
Errechnen und wiedergeben von MwSt und Brutto

Wenn ich jetzt aber zB MwSt einen neuen Wert eingebe, müsste das Brutto neu errechnet u. wiedergegeben werden.
Allerdings geht er nicht in die Funktion - man könnte meinen er findet das Feld nicht für:
$('#rechnung_mwst').focusout(function()

Weiter meine Selbstgespräche hier führe^^ aber immerhin komm ich voran :)


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 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