创建允许多个相同ID分配的数据库关系

时间:2013-03-03 05:24:15

标签: ruby-on-rails database-design

我是RoR的新手,所以如果我没有想到这一点,我会道歉。我有一个报告,我需要能够为该报告分配多个用户。可以将用户分配给多个报表,并且报表可以包含多个用户。如何创建允许此操作的数据库关系。我了解如何将一个用户分配给一个报告,但将一个用户分配给单个报告的用户不多。

2 个答案:

答案 0 :(得分:2)

我使用加入课程来实现这一目标:

class Report

  has_many :assignments 
  has_many :users :through => :assignments

end

class User

  has_many :assignments
  has_many :reports, :through => :assignments

end

class Assignment

  belongs_to :report
  belongs_to :user

end

课程Assignment有两个字段:report_iduser_id来创建关系。

阅读Ruby on Rails活动记录关联指南:http://guides.rubyonrails.org/association_basics.html

答案 1 :(得分:0)

我强烈建议您熟悉Ruby on Rails指南。它们将被证明是一项宝贵的资产!!对于此任务,该网站将为RailsGuides Active Record Associations

就代码而言,您希望创建三个数据库表:reports,reports_users和users,其中reports_users是连接表。

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string      :name,        :null => false      
      t.timestamps
    end
  end
end


class CreateReports < ActiveRecord::Migration
  def change
    create_table :reports do |t|
      t.string      :name,        :null => false      
      t.timestamps
    end
  end
end


class ReportsUsers < ActiveRecord::Migration
  def change
    create_table :reports_users, :id => false do |t|
      t.references    :user,            :null => false                            
      t.references    :report,          :null => false                            
    end
  end
end

运行此迁移后,您需要在模型中设置活动记录关联。

class User < ActiveRecord::Base
  has_and_belongs_to_many :reports
end

class Report < ActiveRecord::Base
  has_and_belongs_to_many :user
end

这将设置数据库和多对多模型连接。这将帮助您入门。现在你必须创建一些观点