2013-07-24 70 views
0

所以我有一個類類別:繼承和Rails

class Category < ActiveRecord::Base 

    attr_accessible :category_id, :name 
end 

和類UserCategory。

class UserCategory < ActiveRecord::Base 
    attr_accessible :user_id, :category_id, usercategory_id 

    self.table_name = 'contractor_categories' 
    self.primary_key = :nid 
    belongs_to :user, class_name: "User", foreign_key: "user_id", 
      :inverse_of => :categories 
end 

所以,當我做User.last.categories.first.name 我想獲得的第一個關聯類的名稱。

我應該怎麼做,沒有做喜歡的事:Category.find(User.last.categories.first.category_id).name

編輯:我目前做:

def name 
    Category.find(self.category_id).name 
    end 

但我敢肯定有一個更好的方式來做到這一點。

+0

「類別」模型是否以任何方式與「UserCategory」或「User」相關聯?您的代碼示例中沒有顯示任何關係。 – lurker

+0

@mbratch Nope,類別還沒有任何關聯。 – bl0b

回答

1

在你的模型,你可以添加關聯

belongs_to :category 

,然後你name方法是這樣的

def name 
    category.name 
end 

,或者你可以做User.last.categories.first.category.name這將節省您創建一個名字的方法,但我不確定你爲什麼會喜歡這個。

+1

更好的是,執行第一步,然後不是定義'name'方法,而是執行:'delegate:name,:to =>:category'。有關'delegate'的更多信息,請參閱http://apidock.com/rails/Module/delegate。 –

+0

Doydle。是的,你的解決方案非常接近我所擁有的 @kardeiz,謝謝!這就是我一直在尋找的東西! 編輯:該死的我只能提到每個評論只有一個人,這很爛 – bl0b

+0

對不起,不是一個真正的答案,但檢查出單表繼承 –