Ruby on rails 如何使用所有者id(而不是用户id)作为外键?

Ruby on rails 如何使用所有者id(而不是用户id)作为外键?,ruby-on-rails,ruby-on-rails-4,many-to-many,Ruby On Rails,Ruby On Rails 4,Many To Many,我正在构建一个应用程序,用户可以在其中创建任意数量的组。创建组时,所有者id(在组表中)设置为当前用户.id 但是,我在显示特定用户拥有的组时遇到了一些问题。请注意,通过GroupMembers表,用户和组之间存在多对多关系 基于此,我修改了group.rb模型,如下所示: class Group < ActiveRecord::Base has_many :group_members, :dependent => :destroy has_many :users, :th

我正在构建一个应用程序,用户可以在其中创建任意数量的组。创建组时,所有者id(在组表中)设置为
当前用户.id

但是,我在显示特定用户拥有的组时遇到了一些问题。请注意,通过GroupMembers表,用户和组之间存在多对多关系

基于此,我修改了group.rb模型,如下所示:

class Group < ActiveRecord::Base 
  has_many :group_members, :dependent => :destroy
  has_many :users, :through => :group_members
  belongs_to  :owner, class_name: User, foreign_key: :owner_id
end
类组:destroy
拥有多个:用户,:至=>:组成员
属于:所有者,类别名称:用户,外部密钥::所有者id
结束
仅将最后一行(“所有者”)添加到模型中。问题在于,当我在视图中显示属于用户的组时:

<h3>User</h3>
<p>User: <%= @user.name %></p>
<p>Email: <%= @user.email if @user.email %></p>
<p>Groups:
  <% @user.groups.each do |group|%>
    <%= group.name %>
   <% end %>
</p>
用户
用户:

电邮:

小组:

没有一组人出现。似乎我需要从UsersController内部显式地连接到groups表才能工作?但我不确定。我不想走得太远,所以我在寻求一些建议

更新:

以下是我的用户模型:

class User < ActiveRecord::Base
has_many :group_members, :dependent => :destroy
has_many :groups, :through => :group_members

  rolify
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :invitable, :database_authenticatable, :registerable, :confirmable,
         :recoverable, :rememberable, :trackable, :validatable
end
class用户:destroy
拥有多个:组,:至=>:组成员
角色化
#包括默认设计模块。其他可供选择的项目包括:
#:可确认、:可锁定、:超时和:全授权
设计:不可修改,:数据库可验证,:可注册,:可确认,
:可恢复,:可记忆,:可跟踪,:可验证
结束

当您获取
@user.groups
时,您使用的是
用户
模型上的
:groups
关联,它独立于
模型上的
有一个:user
关联。因此,您上面提供的代码不是相关的代码。您需要的是:

class User < ActiveRecord::Base
  has_many :groups, foreign_key: :owner_id
end
然后,您需要更新视图代码以执行
@user.owned\u groups
而不是
@user.groups
,否则您将获取错误的集合


(另外,
模型上的反向关系应该是
属于:所有者,类名:用户,外键::所有者id
,而不是
有一个
。区别在于
属于另一个模型的模型应该持有定义关系的外键,而
有一个
关系nship希望外键位于关联表上。)

当您获取
@user.groups
时,您使用的是
用户
模型上的
:groups
关联,它独立于
模型上有一个:user
关联。因此,您上面提供的代码不是相关位。您需要的是:

class User < ActiveRecord::Base
  has_many :groups, foreign_key: :owner_id
end
然后,您需要更新视图代码以执行
@user.owned\u groups
而不是
@user.groups
,否则您将获取错误的集合


(另外,
模型上的反向关系应该是
属于:所有者,类名:用户,外键::所有者id
,而不是
有一个
。区别在于
属于另一个模型的模型应该持有定义关系的外键,而
有一个
关系nship希望外键位于关联的表中。)

您可以执行以下操作

# user.rb
has_many :owned_groups, foreign_key: 'owner_id', class_name: "Group"

这将区分用户拥有的组和用户所在的组

# user.rb
has_many :owned_groups, foreign_key: 'owner_id', class_name: "Group"

这将区分用户拥有的组和用户所在的组。

我更新了我的问题。我是否应该添加第二行“has_many”行?用户和组之间存在多对多关系(因为用户的行为类似于成员)。但我还想从用户到组添加一对多(因为用户的行为也类似于所有者)。太棒了。这很有效。我只需要将
@users.groups
更改为
@users.owned\u groups
。我更新了我的问题。我应该添加第二行“has\u many”吗?与用户和组之间存在多对多关系(因为用户的行为类似于成员)。但我也希望从用户到组添加一对多关系(因为用户的行为也像所有者一样)。太棒了。这很有效。我只需要将
@users.groups
更改为
@users.owned\u groups