Salve,
Sto lavorando su rails 2.3.2 con ruby 1.9.1 e ho provato a creare delle relazioni fra 2 tabelle tramite una tabella di join.
I miei Model sono:
- User
- Activity
- ActivityUser (è il model che uso per legare User e Activity)
La tabella del ActivityUser ha la seguente struttura:
Il model del ActivityUser ha le seguenti relazioni:codice:create_table :activity_users do |t| t.integer :activity_id, :null => false t.integer :holder_id # gli utenti che lavorano sull'attività t.integer :receiver_id # gli utenti per cui viene realizzato l'attività t.timestamps end
Il model del Activity ha le seguenti relazioni:codice:class ActivityUser < ActiveRecord::Base belongs_to :activity belongs_to :holder, :class_name => "User", :foreign_key => "holder_id" belongs_to :receiver, :class_name => "User", :foreign_key => "receiver_id" end
Ok, per adesso nessun problema, riesco a creare un attività ed ad associarci degli holders e dei receivers.codice:class Activity < ActiveRecord::Base has_many :activity_users has_many :holders, :through => :activity_users has_many :receivers, :through => :activity_users end
Il mio problema è di impostare le relazioni sul model User in modo da ottenere le attività legate al utente come holder oppure receiver.
Ho provato queste relazioni sul model User (però non funziona):
Mi restituisce il seguente errore:codice:class User < ActiveRecord::Base has_many :activity_users has_many :activities, :through => :activity_users end
Dovvrei dire al mio User model di usare il campo holder_id oppure receiver_id nella clausola WHERE ma non so come fare perché l'opzione :through ignora le opzioni :class_name e :foreign_key .codice:ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'activity_users.user_id' in 'where clause': SELECT `activities`.* FROM `activities` INNER JOIN `activity_users` ON `activities`.id = `activity_users`.activity_id WHERE ((`activity_users`.user_id = 2))
Qualcuno mi può aiutare? Grazie.

Rispondi quotando