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:
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 ActivityUser 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
Il model del Activity ha le seguenti relazioni:
codice:
class Activity < ActiveRecord::Base
has_many :activity_users
has_many :holders, :through => :activity_users
has_many :receivers, :through => :activity_users
end
Ok, per adesso nessun problema, riesco a creare un attività ed ad associarci degli holders e dei receivers.
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):
codice:
class User < ActiveRecord::Base
has_many :activity_users
has_many :activities, :through => :activity_users
end
Mi restituisce il seguente errore:
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))
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 .
Qualcuno mi può aiutare? Grazie.