Z jednej tabeli dwa powiązania do drugiej

Hej

Mam taki problem i na razie nie wiem jak sobie z nim poradzić.

Wytłumaczę to na przykładzie takim:

Mamy powiedzmy zadanie(Task), ono należy do użytkownika (User). Tak więc mamy tutaj asocjację belongs_to i has_many, z kluczem obcym user_id.
Teraz chcę zapamiętać w Task-u kto utworzył to zadanie i zrobić drugą asocjację z encją User. Chciałbym dowiedzieć się kto dodał zadanie Task.owner oraz kto jest za nie odpowiedzialny (tak jak do tej pory miałem Task.user)

Trochę poczytałem dokumentację ale i tak nie do końca wiem jak się za to zabrać. Nie wiem czy to też jest najlepszy pomysł. W każdym razie nie chciałbym to rozbijać has_and_belongs_to_many.

Bo w sumie to co chcę uzyskać to drobna poprawka kosmetyczna raczej niż zmiana jakiejś dotychczasowej koncepcji.

Oczywiście interesowałoby mnie rozwiązanie Active Record, a dokładnie co powrzucać do klas class User < ActiveRecord::Base oraz Task < ActiveRecord::Base

Dzięki za pomoc :slight_smile:

Wytarczy, że do zadania dodasz kolumnę creator_id (analogiczną jak user_id) i możesz wtedy napisać:

[code=Ruby]class Task < ActiveRecord::Base
belongs_to :user
belongs_to :creator, :class_name => “User”
end

class User < ActiveRecord::Base
has_many :tasks
has_many :created_tasks, :foreign_key => “creator_id”, :class_name => “Task”
end[/code]

Dzięki wielkie, z dokumentacji nie umiałem się połapać o co biega. Wstawiam mój kod jakby ktoś szukał czegoś podobnego.

[code]require ‘rubygems’
require ‘active_record’
require ‘logger’

ActiveRecord::Base.establish_connection(
:adapter => ‘mysql’,
:database => ‘Ruby’,
:username => ‘root’,
:password => ‘marysia’,
:host => ‘localhost’)

ActiveRecord::Base.logger = Logger.new(STDERR)

class User < ActiveRecord::Base
has_many :tasks
has_many own_tasks, :foreign_key => ‘owner_id’, :class_name => “Task”
end

class Task < ActiveRecord::Base
belongs_to :user
belongs_to :owner, :foreign_key => ‘owner_id’, :class_name => “User”
end

task = Task.find 1
puts task.owner.name[/code]

Jak używasz establish_connection to możesz użyć nazwy połaczenia zdefiniowanego z database.yml

establish_connection RAILS_ENV #albo establish_connection "jakas_inna_baza"