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  [ 10 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 03 Feb 2014, 17:17 
Offline
Meister

Registriert: 10 Dez 2009, 14:39
Beiträge: 217
Hallo,

für n:n Relationen kann ich ja über association_ids einer Entität vom Formular einen Sack von ids der Gegenseite mitgeben und Rails speichert diese automatisch in der Kreuztabelle.

Wie funktioniert das möglichst unkompliziert bei einer 1:n Beziehung? Hier könnte ich auch association_ids mitgeben und dann im Controller die belongs_to Seite abarbeiten. Das erscheint mir jedoch auf den ersten Blick zu hemdsärmelig und ich würde gerne Rails die Arbeit machen lassen.

Hat jemand einen Tipp? Vielen Dank!

_________________
Sorry, wenn ich doofe Fragen stelle, stehe noch ganz am Anfang :oops:


Nach oben
 Profil  
 
BeitragVerfasst: 04 Feb 2014, 15:48 
Offline
Schüler
Benutzeravatar

Registriert: 29 Jan 2014, 14:52
Beiträge: 48
Wohnort: Berlin
Verstehe ich das richtig:

Folgendes Beispiel:



1
2
3
4
5
6
7
8

class User
has_many :customers
end

class Customer
belongs_to :user
end


Das ist deine Ausgangsbasis?

Und jetzt willst du dem User beim abspeichern sagen welche Customers er besitzt?

_________________
Jeeht nich jibbs nich...!
----------------------------------
https://rubygems.org/profiles/friendssystems
https://github.com/florianeck


Nach oben
 Profil  
 
BeitragVerfasst: 06 Feb 2014, 11:29 
Offline
Meister

Registriert: 10 Dez 2009, 14:39
Beiträge: 217
Genau. Die bestehenden Objekte 'Customer', die per customer_ids übergeben werden, sollen beim Ändern von 'User' mit aktualisiert werden.

Ich will dafür nicht im Controller oder Model extra rummachen, bei einer Kreuztabelle macht Rails das automatisch. Meine Frage ist, ob es eine ähnliche "Magic" auch für hm/bt Relationen gibt.

_________________
Sorry, wenn ich doofe Fragen stelle, stehe noch ganz am Anfang :oops:


Nach oben
 Profil  
 
BeitragVerfasst: 06 Feb 2014, 12:20 
Offline
Schüler
Benutzeravatar

Registriert: 29 Jan 2014, 14:52
Beiträge: 48
Wohnort: Berlin
Folgendes, ausgehend von meinem Codebeispiel:



1
2
3
4
5

@user = User.find(params[:id])
@user.customers = Customer.where(:id => params[:customer_ids]

# ACHTUNG: Wenn du das machst werden alle bestehenden Customer mit der user_id '@user.id' auf nil gesetzt, siehe n��chstes Beispiel:




1
2
3
4
5

@user = User.find(4)
@user.customers = Customer.where(:id => (1..5) )

# Dann passiert das hier:




1
2
3
4
5
6
7
8

// Auszug SQL-Queries der Aktion
UPDATE `customers` SET `user_id` = NULL WHERE `customers`.`user_id` = 4;
UPDATE `customers` SET `user_id` = 4 WHERE `customers`.`id` = 1;
UPDATE `customers` SET `user_id` = 4 WHERE `customers`.`id` = 2;
UPDATE `customers` SET `user_id` = 4 WHERE `customers`.`id` = 3;
UPDATE `customers` SET `user_id` = 4 WHERE `customers`.`id` = 4;
UPDATE `customers` SET `user_id` = 4 WHERE `customers`.`id` = 5;


Du solltest dir in jedem Fall überlegen was du mit den Customers machst die jetzt keine user_id mehr haben.....

Alternativ kannst du auch folgendes tun, um die gewählten Customers zu den bestehenden customers des users hinzuzufügen:



1
2
3
4
5

@user = User.find(params[:id])
@user.customers << Customer.where(:id => params[:customer_ids]

# Wie du siehst, '@user.customers' verh��lt sich wie ein Array, und du kannst alle g��ngigen Array-Funktionen verwenden


Jetzt meine abschließende Frage: warum willst du die Customer-Ids per parameter übergeben?

_________________
Jeeht nich jibbs nich...!
----------------------------------
https://rubygems.org/profiles/friendssystems
https://github.com/florianeck


Nach oben
 Profil  
 
BeitragVerfasst: 06 Feb 2014, 14:15 
Offline
Meister

Registriert: 10 Dez 2009, 14:39
Beiträge: 217
Ok, danke. Also doch extra Aufwand im Controller, auch wenn es nur eine Zeile ist.

Zu Deiner Frage: Wenn ich die o. g. Relation habe, also hm/bt, dann kann ich ja auf der belongs_to-Seite der Relation problemlos mit einer *_id den Fremdschlüssel per select/option Auswahl bestimmen.

Ich möchte halt gerne von der anderen Seite ein "mass-assign" machen, also von der hm-Seite aus per multiselect: true in einer select/option Auswahl mehrere Zielentitäten "zuweisen".

Mit einer Kreuztabelle macht Rails das automatisch, man muss bloss im Formular ein Feld haben, das mit Namen *_ids heisst und wo eine Liste von Ids drin steckt. Es sind also bis um eine Erweiterung des Formulars und der Ergänzung der White List im Controller keine weiteren Maßnahmen notwendig.

Da dachte ich mir halt, dass das für die weniger komplexe hm/bt Relation auch geht…

Danke für Deine Mühe und den Code!

_________________
Sorry, wenn ich doofe Fragen stelle, stehe noch ganz am Anfang :oops:


Nach oben
 Profil  
 
BeitragVerfasst: 06 Feb 2014, 14:38 
Offline
Schüler
Benutzeravatar

Registriert: 29 Jan 2014, 14:52
Beiträge: 48
Wohnort: Berlin
Haha, noch mal ein update.

Auch bei hm:bt kannst du customer_ids setzen.

Also lange rede kurzer sinn -


 @user.customer_ids = params[:customer_ids]
machts

_________________
Jeeht nich jibbs nich...!
----------------------------------
https://rubygems.org/profiles/friendssystems
https://github.com/florianeck


Nach oben
 Profil  
 
BeitragVerfasst: 06 Feb 2014, 16:05 
Offline
Meister

Registriert: 10 Dez 2009, 14:39
Beiträge: 217
Hmm, das habe ich ja schon versucht, aber das hat nicht geklappt. Da ist gar nichts passiert. Da scheint es wohl bei mir irgendwo gehakt zu haben. Aber grundsätzlich lag ich dann wohl richtig. Ich probiere das auch noch einmal…

Edit: Ok, diese zusätzliche Zeile im Controller hatte ich nicht. Das muss man bei einer Kreuztabelle nicht machen.

Edit Zusatz: Hehe, smart_search habe ich für morgen auf dem Plan. So viel Auswahl gibt es ja für eine reine AR Suche nicht und Sphinx etc. wollte ich erstmal nicht benutzen. Bin gespannt, wie Dein Gem ist :=)

_________________
Sorry, wenn ich doofe Fragen stelle, stehe noch ganz am Anfang :oops:


Nach oben
 Profil  
 
BeitragVerfasst: 06 Feb 2014, 16:10 
Offline
Schüler
Benutzeravatar

Registriert: 29 Jan 2014, 14:52
Beiträge: 48
Wohnort: Berlin
ja viel spaß damit.

aber es ist echt nur simpel, keine korrektur oder "meinten sie" etc... es matcht nur eins zu eins...

_________________
Jeeht nich jibbs nich...!
----------------------------------
https://rubygems.org/profiles/friendssystems
https://github.com/florianeck


Nach oben
 Profil  
 
BeitragVerfasst: 06 Feb 2014, 16:47 
Offline
Meister

Registriert: 10 Dez 2009, 14:39
Beiträge: 217
Kein Problem, musst Dich nicht schon vorher entschuldigen. Ich bin dankbar, dass es überhaupt was gibt und ich nicht sofort selber ran muss :=)

Wenn Du Interesse hast, kann ich ja berichten.

_________________
Sorry, wenn ich doofe Fragen stelle, stehe noch ganz am Anfang :oops:


Nach oben
 Profil  
 
BeitragVerfasst: 06 Feb 2014, 16:57 
Offline
Schüler
Benutzeravatar

Registriert: 29 Jan 2014, 14:52
Beiträge: 48
Wohnort: Berlin
cool, schick mir ne PN... ich freu mich drauf...
bei fragen kannst du dich natürlich auch melden

_________________
Jeeht nich jibbs nich...!
----------------------------------
https://rubygems.org/profiles/friendssystems
https://github.com/florianeck


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