2011-05-26 53 views
0

越来越属性故障那是我的模型:导轨 - 从关系

class Person < ActiveRecord::Base 
    has_many :honors, :dependent => :destroy, :foreign_key => "honored_id" 
    has_many :honor_creators, :through => :honors, :source => :person, :foreign_key => "person_id" 

class Group 
    has_many :honorss,:foreign_key => "group_id" 

class Honor 
    belongs_to :person, :class_name => 'Person', :foreign_key => "person_id" 
    belongs_to :honored, :class_name => 'Person', :foreign_key => "honored_id" 
    belongs_to :group, :class_name => 'Group', :foreign_key => "group_id" 

由于honorsperson#show页面显示,这里是我的控制器:

def show 
    ... 
    @honors = @person.honors.paginate(:page => params[:page], :per_page => Honor.per_page) 
end 

而我的观点:

<% unless @honors.empty? %> 
<% @honors.each do |ho| %> 

我的问题是:使用ho我得到所有来自honor的属性,但是我想获得它所属的荣誉创造者和团队。我怎样才能做到这一点?

谢谢!

回答

1

你可以通过访问

ho.person 

ho.group 
0

注:

belongs_to :group, :class_name => 'Group', :foreign_key => "group_id" 

belongs_to :group 

将做同样的事情,因为Rails将假设你给它的类和外键:group

要获得ho.honor_creator工作(如果我假设正确的),你会想:

class Person < Model 
    has_many :honors, :foreign_key => :creator_id 
end 

class Honor < Model 
    belongs_to :creator, :class_name => "Person" 
end 

这样的话,你可以设置honor.creator_id = params[:user_id],然后用ho.creator访问的人。

换句话说,我会重做你的模型是这样的:

class Person < ActiveRecord::Base 
    belongs_to :honor, :foreign_key => :recipient_id 
    has_many :honors, :foreign_key => :creator_id 

class Group 
    has_many :honors 

class Honor 
    has_many :recipients, :class_name => 'Person' # recipient_id is assumed 
    belongs_to :creator, :class_name => 'Person' # creator_id is assumed 
    belongs_to :group # group_id is assumed 

我改名一些列希望做出更好的感觉,这是从我的头顶完成的,所以我我会看一些参考资料来确保我的准确性。

这将使您访问honor.creatorhonor.group

<% @honors.each do |honor| %> 
    Honor Creator: <%= honor.creator.name %> 
    Honor Group: <%= honor.group.name %> 
    Honor Recipients: <% honor.recipients.each {|recipient| puts recipient} %> 
<% end %> 

可能是搞砸了收件人协会,但我会去看看。