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  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: updaten einer serialized variable
BeitragVerfasst: 02 Aug 2015, 10:47 
Offline
Geselle

Registriert: 15 Jun 2008, 14:57
Beiträge: 141
Hallo,

ich möchte eine serialize Variable in einem textarea bearbeiten und dann updaten, komme aber im Moment einfach nicht weiter.
Folgenden Aufbau habe ich zur Zeit:



1
2
3
class Formula < ActiveRecord::Base
serialize :options, Hash
end




1
2
3
4
5
6
7
class FormulasController < ApplicationController
...
# GET /formulas/1/edit
def edit
@options = @formula.options.to_yaml
end
...




1
2
3
4
  <div class="field">
<%= f.label :options %><br>
<%
=
f.text_area :options, :value => @options %>
</div>


im Textfeld wird es folgendermaßen angezeigt:


1
2
---
:name: Testname

beim updaten kommt jedoch:
Attribute was supposed to be a Hash, but was a String. -- "---\r\n:name: Testname\r\n"

ich hab die Vermutung das ich irgendwo beim Speichern YAML.load() einbauen muss, komme aber einfach nicht weiter


Nach oben
 Profil  
 
BeitragVerfasst: 02 Aug 2015, 11:07 
Offline
Interpreter

Registriert: 10 Dez 2007, 17:37
Beiträge: 1906
Das to_yaml kannst du weg lassen. Rails konvertiert automatisch einen Hash in das entsprechente Format, um die Daten in der DB zu speichern.

Edit: Ich sehe gerade erst, dass du den gesamten Hash in einer TextArea editeren lässt. Dann musst du die Daten aus der Textarea in einen Hash umwandeln. Ist dein Anwender in der Lage Valides YAML zu schreiben in einer TextArea? Die Einrückungen dort richtig zu machen Halte ich für kompliziert.

_________________
Grüße
Jack


Nach oben
 Profil  
 
BeitragVerfasst: 02 Aug 2015, 11:14 
Offline
Geselle

Registriert: 15 Jun 2008, 14:57
Beiträge: 141
Hi slowjack2k,

das to_yaml ist für die view, damit im textarea die daten als YAML (--- :name: Zugspannung) anstatt ({:name=>"Testname"}) angezeigt wird.

Edit: also wie die Daten im textarea angezeigt werden ist mir eigentlich egal. Das Feld wird später nur vom Admin geändert und auch nur in Einzelfällen geändert, also mal ein paar Werte hinzugefügt oder geändert.


Nach oben
 Profil  
 
BeitragVerfasst: 02 Aug 2015, 11:36 
Offline
Interpreter

Registriert: 10 Dez 2007, 17:37
Beiträge: 1906


1
2
3
4
5
6
7
8

class FormulasController < ApplicationController
def update
...
@formula.options= YAML.load(params[..]['options']) rescue nil

end
end

_________________
Grüße
Jack


Nach oben
 Profil  
 
BeitragVerfasst: 02 Aug 2015, 12:24 
Offline
Geselle

Registriert: 15 Jun 2008, 14:57
Beiträge: 141
Danke Jack, das funktioniert schonmal.
Jetzt hab ich noch eine NOOB-Frage, da ich leider schon ewig nichts mehr mit Rails gemacht und hab daher überhaupt keine Ahnung von den strong parameters habe.
Ich hab das jetzt so gelöst - was zwar funktioniert aber nicht geschickt ist, da das Objekt 2 mal gespeichert wird.

Gibt es eine Möglichkeit das irgendwie in die strong parameters einzubauen?



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  # PATCH/PUT /formulas/1
# PATCH/PUT /formulas/1.json
def update
@formula.options= YAML.load(params['formula']['options']) rescue nil
@formula.save

respond_to do |format|
if @formula.update(formula_params)
format.html { redirect_to @formula, notice: 'Formula was successfully updated.' }
format.json { render :show, status: :ok, location: @formula }
else
format.html { render :edit }
format.json { render json: @formula.errors, status: :unprocessable_entity }
end
end
end
...
# Never trust parameters from the scary internet, only allow the white list through.
def formula_params
params.require(:formula).permit(:mathml)
end


Nach oben
 Profil  
 
BeitragVerfasst: 02 Aug 2015, 22:43 
Offline
Interpreter

Registriert: 10 Dez 2007, 17:37
Beiträge: 1906
Erstmal, du solltest nie "save" ohne ein "if" verwenden. Dann lieber save!, dann bekommst du zumindest eine Exception wenn was schief geht.

Folgendes könnte vielleicht gehen:



1
2
3
4
5

def formula_params
params['formula']['options'] = YAML.load(params['formula']['options']) rescue nil
params.require(:formula).permit(:mathml, options: [:opt1, :opt2])
end

_________________
Grüße
Jack


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