has_many通过一个额外的列

时间:2012-09-25 14:55:31

标签: ruby-on-rails ruby associations has-many-through

我正在解决一个我无法解决的问题。

我有以下内容:

群组表:

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

分组表:

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

我想通过群发查看用户是否是群组的所有者以及用户拥有的权限。 这是可能的,还是我必须制作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 %>

1 个答案:

答案 0 :(得分: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 %>