Създаване на връзка с база данни, която позволява множество присвоявания на един и същ идентификатор

Наистина съм нов в RoR, така че се извинявам, ако не мисля за това правилно. Имам отчет, където трябва да мога да присвоя няколко потребители към този отчет. Един потребител може да бъде присвоен на повече от един отчет и един отчет може да има множество потребители. Как да създам връзката на базата данни, където това би било разрешено. Разбирам как да присвоя един потребител на един отчет, но не много потребители на един отчет.


person user2128197    schedule 03.03.2013    source източник


Отговори (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_id и user_id за създаване на връзката.

Прочетете ръководството на Ruby on Rails за асоциации на активни записи: http://guides.rubyonrails.org/association_basics.html

person Richard Brown    schedule 03.03.2013
comment
Добре, започва да има смисъл, но така че го разбирам по-ясно, защо да не използвам has_and_belongs_to_many, тъй като отчетът има много потребители и потребителите могат да принадлежат към много отчети? Благодаря много за помощта. - person user2128197; 03.03.2013
comment
Можете да използвате това, но като използвате горното, получавате същата функционалност плюс възможността да добавяте полета към Заданието (като дати, бележки и т.н.), ако желаете. habtm скрива таблицата за присъединяване. Цялостната функционалност е подобна. - person Richard Brown; 03.03.2013

Горещо ви препоръчвам да се запознаете с ръководствата на Ruby on Rails. Те ще се окажат безценен актив!! За тази задача сайтът ще бъде RailsGuides Active Record Associations.

Що се отнася до кода, вие искате да създадете три таблици на база данни: отчети, reports_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

Това ще настрои базата данни и връзките на моделите много към много. Това ще ви помогне да започнете. Сега трябва да създадете някои изгледи

person Jonathan Katon    schedule 03.03.2013
comment
Като странична бележка сайтът на Rails Guides е guides.rubyonrails.org, а друг сайт, с който трябва да се запознаете, е api страницата на rails на api.rubyonrails.org - person Jonathan Katon; 03.03.2013