2012-09-25 94 views
2

我正在解决我无法解决的问题。has_many通过一个额外的列

我有以下几点:

组表:

create_table "groups", :force => true do |t| 
    t.string "name" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
end 

Groupships表:

create_table "groupships", :force => true do |t| 
    t.integer "group_id" 
    t.integer "user_id" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    t.boolean "owner" 
    t.text  "permission" 
end 

group.rb:

class Group < ActiveRecord::Base 
    belongs_to :user 
    has_many :groupships 
    has_many :groups, through: :groupships 
end 

groupship.rb:

class Groupship < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :group 
end 

我想通过groupship查看用户是否是组的所有者以及用户拥有什么权限。 这是可能的,还是我必须做一个group_perssions表?

我在一个视图中尝试这样做:

<% @groups.each do |group| %> 
    <div class="well well-small"> 
     <h3><%= group.name %></h3> 
     Owner: <%= group.groupships.owner %> //True or false readout for development. 
    </div> 
<% end %> 
+0

你的意思是说群体有很多用户通过群组?你的意思是说一个团体有很多团体吗?你的组模型对我来说似乎很奇怪。 – cdesrosiers

回答

0

我想你给你的Groupship类的例子可能会稍有不妥。它不应该是..

class Group < ActiveRecord::Base 
    has_many :groupships 
    has_many :users, through: :groupships 
end 

一个组可以有很多用户,并且一个用户可以拥有多个组吗?

至于您给出的视图示例,不能简单地调用group.groupships.owner,因为group.groupships是一个集合,而所有者布尔值是单个组的属性。你可以这样做,而不是:

<% @groups.each do |group| %> 
    <div class="well well-small"> 
    <h3><%= group.name %></h3> 
    Owners: 
    <%= group.groupships.each do |groupship| %> 
     <%= groupship.user.name %>: 
     <%= groupship.owner? %> 
    <% end -%> 
    </div> 
<% end %> 
+0

嘿,彼得!感谢您的帮助,它的工作原理稍作修改: <%= groupship.user.owner? %>应该是<%= groupship.owner? %> –

+0

哦,当然,快速打字从来都不好;) –