Has_and_belongs_to_many beziehung ohne id feld

Hi an alle…

Also ich hab ein problem…
ich habe folgende tabellen:

sms_halle:
ID, name, notiz, tjms_hallenID, tjms_kundenID, …

mediakatselecthalle:
mediaKatID, kundenID, hallenID

mediakat:
mediaKatID, medianame, dateiname…

So.

ich will jetzt eine habtm beziehung zwischen sms_halle und mediakat
machen. in Beziehung zu einander stehen sms_halle.tjms_hallenID =
mediakatselecthalle.hallenID und sms_halle.tjms_kundenID =
mediakatselecthalle.kundenID

wie stelle ich das an?

Hoffe ich konnte mich deutchlich genug ausdrücken :wink:

lg
nico

Am 20.03.2009 um 09:44 schrieb Nils Berta:

wie stelle ich das an?

war um ohne id ?

http://ramblings.gibberishcode.net/archives/rails-has-and-belongs-to-many-habtm-demystified/17
http://www.jumbabox.com/2008/06/ruby-on-rails-many-to-many-tutorial/

Gruß von Werner der auch so einige Fragen für dieses Thema noch hat…

Werner L. wrote:

Am 20.03.2009 um 09:44 schrieb Nils Berta:

wie stelle ich das an?

war um ohne id ?

http://ramblings.gibberishcode.net/archives/rails-has-and-belongs-to-many-habtm-demystified/17
http://www.jumbabox.com/2008/06/ruby-on-rails-many-to-many-tutorial/
Ruby on Rails Screencasts - RailsCasts

Gru� von Werner der auch so einige Fragen f�r dieses Thema noch hat…

Achso, ich sollte noch erwähnen, dass die Datenbank auf einem Server
läuft, dessen Anwendungen genau die Datenbank so wie sie ist verwendet.
ich habe also leider nicht die möglichkeit irgendwas zu ändern. gr
Aber sonst wäre es auch wirklich zu einfach.

So simple die idee… da hätte ich auch selber drauf kommen können…

ich danke für die hilfe… ich werde es wohl so machen…

nochmals danke :wink:

viele grüße
nils

Hi Nils,

also auf den ersten Blick hätte ich angenommen, dass das ganze mit
“has_many :through” gelöst werden kann.

Aber da die Tabellenattribute ja leider nicht den Rails-Konventionen
entsprechen und du diese nicht ändern kannst, geht dies wohl nicht.
(Ich lasse mich da gern verbessern.)

Ich würde es in etwa wie folgt machen. Du legst im Model, das zu
sms_halle gehört, eine Funktion an, die dir mithilfe eines
SQL-Statements direkt die zugehörigen mediakats liefert:

class SmsHalle < ActiveRecord::Base
def mediakats
Mediakat.find_by_sql("select mk.mediaKatID, mk.medianame, " +
"mk.dateiname from sms_halle s " +
"join mediakatselecthalle m "+
“on s.tjms_hallenID=m.hallenId” +
"and s.tjms_kundenID=m.kundenId " +
"join mediakat mk " +
"on m.mediaKatID=mk.mediaKatID " +
“where s.id=”+self.id)
end
end

In einem Kontroller könnte das dann so aussehen:
@sms_halle = SmsHalle.find(id)
@mediakats = @sms_halle.mediakats

Ich habe das jetzt schnell runtergetippt, da sind sicher noch einige
Fehler drin. Aber ich hoffe die Idee ist klar geworden.

Viele Grüße
Timo

Am Freitag, den 20.03.2009, 10:06 +0100 schrieb Nils Berta: