【问题标题】:has_many through with an extra columnhas_many 通过一个额外的列
【发布时间】:2012-09-25 14:55:31
【问题描述】:

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

我有以下几点:

组表:

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

我想通过 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 %>

【问题讨论】:

  • 你的意思是说一个组有很多用户是通过groupships的吗?你的意思是说一个群体有很多群体吗?你的团队模式在我看来很奇怪。

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


【解决方案1】:

我认为您提供的关于 Groupship 课程的示例可能略有错误。不应该吗。。

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

一个组可以有多个用户,一个用户可以有多个组对吗?

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

<% @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 %>

【讨论】:

  • 嘿彼得!感谢您的帮助,它可以工作,稍作修改: 应该是
猜你喜欢
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-19
  • 2012-05-16
  • 2010-09-29
  • 1970-01-01
相关资源
最近更新 更多