【问题标题】:has_and_belongs_to_many or has_many for user/group relationship?has_and_belongs_to_many 或 has_many 用于用户/组关系?
【发布时间】:2012-02-03 14:44:16
【问题描述】:

我正在开发具有以下模型的 Rails 3.1 应用程序:

用户:

class User < ActiveRecord::Base
  has_and_belongs_to_many :groups
  has_many :ownerships, :class_name => 'Group'
end

组:

class Group < ActiveRecord::Base
  has_and_belongs_to_many :users
  has_one :owner, :class_name => 'User'
end

它们之间有一个连接表,groups 表也有一个“user_id”列。我希望能够在我的 groups_controller.rb 中写这个

@group = Group.find(params[:id])
foo = @group.owner

但是当我这样做时,我会遇到以下错误:

Mysql2::Error: Unknown column 'users.group_id' in 'where clause': SELECT  `users`.* FROM `users`  WHERE `users`.`group_id` = 1 LIMIT 1

我不明白它为什么还要寻找那个专栏。任何帮助将不胜感激!

【问题讨论】:

    标签: ruby-on-rails has-and-belongs-to-many has-one


    【解决方案1】:

    确保您的组表有一个 user_id 或 owner_id 列,然后试试这个:

      class Group < ActiveRecord::Base
        has_and_belongs_to_many :users
        belongs_to :owner, :class_name => 'User'
      end
    

    【讨论】:

    • 谢谢蚁爪。这似乎是向前迈出了一步(因为它不再给我 MySQL 错误),但它仍然为 @group.owner.inspect 返回 nil。
    • 您确定列 owner_id 不为空并且具有该 id 的用户存在于用户表中吗?
    • 你是对的!我实际上有“user_id”而不是“owner_id”。但是现在当我尝试从另一边(@user.ownerships.inspect)进来时,它又在寻找“user_id”列。附言我在原始问题中更新了我的用户模型。
    • 也许添加 :foreign_key 选项会有所帮助,抱歉我不确定
    • 就是这样!非常感谢! :)
    猜你喜欢
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    相关资源
    最近更新 更多