2009-07-22 17 views
155

W moim modelu użytkownik może mam:Szyny has_many z alias

has_many :tasks 

iw moim modelu Zadanie:

belongs_to :user 

Następnie zakładając klucz obcy „user_id” przechowywano w zadaniach stół może używać:

@user.tasks 

Moje pytanie brzmi, jak mogę zadeklarować relację has_many takie, że mogę odnieść się do zadania użytkownika jako:

@user.jobs 

... albo ...

@user.foobars 

Dzięki sterty.

+7

byłbym zmęczony korzystania zadanie jako nazwę klasy - to słowo zarezerwowane Rails i może powodować dziwne problemy w dół drogi: http://reservedwords.herokuapp.com/ –

+0

Miałem ten sam problem @doctororange! –

Odpowiedz

303

Daj to strzał:

has_many :jobs, foreign_key: "user_id", class_name: "Task" 

uwaga, że ​​:as służy do polymorphic associations.

+0

Dziękuję, że włączyłeś również klucz obcy - rozwiązałem mój podobny, ale inny problem. –

+2

Czy to wymaga czegoś specjalnego po stronie Zadanie lub czy zwykle 'belongs_to' jest wystarczające? –

-49

Można to zrobić na dwa różne sposoby. Jednym z nich jest za pomocą „jako”

has_many :tasks, :as => :jobs 

lub

def jobs 
    self.tasks 
end 

Oczywiście pierwsza byłaby najlepszym sposobem, aby ją obsłużyć.

+0

Dzięki, brzmi idealnie. Niestety to nie działa: USER Model: HAS_MANY: zadania: a =>: created_tasks Kontroler: @created_tasks = @ user.created_tasks ----- NoMethodError w TasksController Wskaźnik niezdefiniowana metoda 'created_tasks 'dla # doctororange

+35

: jak jest używana dla asocjacji polimorficznych nie dla tego konkretnego problemu ... –

+3

Druga metoda jest w rzeczywistości całkiem przydatna do stworzenia aliasu skojarzenia. – jpgeek

25

Można również użyć alias_attribute jeśli nadal chcesz być w stanie odnieść się do nich zadań, a także:

class User < ActiveRecord::Base 
    alias_attribute :jobs, :tasks 

    has_many :tasks 
end 
Powiązane problemy