2013-07-24 59 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

对不起,不是一个真正的答案,但检查出单表继承 –