【问题标题】:Rails - Model DoubtRails - 模型怀疑
【发布时间】:2011-05-22 20:36:33
【问题描述】:

鉴于我有这样的模型:

class Person
  has_many :owned_groups, :class_name => "Group", :foreign_key => :owner_id
  has_many :owned_group_memberships, :through => :owned_groups, 
              :source => :group_memberships 

  has_many :group_memberships, :foreign_key => "member_id"
  has_many :groups, :through => :group_memberships

end

class GroupMembership
  belongs_to :member, :class_name => 'Person'
  belongs_to :group
end

class Group
  belongs_to :owner, :class_name => "Person"
  has_many :group_memberships
  has_many :members, :through => :group_memberships
end

我如何访问members 和group 拥有的?我总是做@group.members 或类似的事情,给我一个错误,说在模型中找不到关系。

提前致谢。

##EDIT##

我得到的错误是:Could not find the association "group_memberships" in model Group

【问题讨论】:

  • 你试过@group.people 吗?
  • 请告诉我们您遇到的错误。
  • 我显示了错误,但这次我会复制它:Could not find the association "group_memberships" in model Group
  • 我们可以查看您的迁移吗?以防万一

标签: ruby-on-rails ruby-on-rails-3 models rails-models


【解决方案1】:

我在我正在开发的网站上做了类似的事情,但关联与您的操作方式略有不同,但也许会有所帮助。我认为您需要使用 has_and_belongs_to_many 关联来加入您的多对多。

在我的数据库中,我有用户、成员和用户成员

您不需要创建 UsersMembers 模型(在您的情况下为 GroupMembership),但您确实需要一个数据库表来链接两者。

#Migration
    create_table :bands_users, :id => false, :force => true do |t|
      t.integer :band_id,       :null => false
      t.integer :user_id,       :null => false
    end

#Models
  class Band < ActiveRecord::Base
    has_and_belongs_to_many :members, :class_name => 'User'
  end

  class User < ActiveRecord::Base
    has_and_belongs_to_many :bands
  end

从此我现在可以调用@band.members 或@user.bands

【讨论】:

  • 感谢您的回答!问题是我在 Group_Membership 中有属性,并且我的所有项目都已经在使用这个结构。所以这样的改变是不可行的=/
【解决方案2】:

您可能需要在 has_many :members 语句中指定 :class_name => 'Person'。

【讨论】:

    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 2018-10-04
    • 2017-10-01
    • 2016-09-06
    • 2011-10-01
    相关资源
    最近更新 更多