2016-03-08 80 views
0

我目前有3个模型(用户,配对,会议)和连接表meetings_pairings。将关联添加到HaBtM关系的关联表

User.rb

class User < ActiveRecord::Base 

    enum role: [:student, :supervisor, :admin] 

    has_many :students, class_name: "User", 
         foreign_key: "supervisor_id" 

    belongs_to :supervisor, class_name: "User" 

    has_and_belongs_to_many :pairings 

end 

Pairings.rb

class Pairing < ActiveRecord::Base 

    has_and_belongs_to_many :supervisor, class_name: 'User' 
    belongs_to :student, class_name: 'User' 

    has_and_belongs_to_many :meetings, join_table: :meetings_pairings 

end 

Meetings.rb

class Meeting < ActiveRecord::Base 

    enum status: [:available, :unavailable] 

    has_and_belongs_to_many :pairings, join_table: :meetings_pairings 

end 

Schema.rb(相关比特)

create_table "meetings", force: :cascade do |t| 
    t.date  "meeting_date" 
    t.datetime "meeting_time" 
    t.integer "status",  default: 0, null: false 
    t.boolean "accepted" 
    end 

    create_table "meetings_pairings", id: false, force: :cascade do |t| 
    t.integer "pairing_id" 
    t.integer "meeting_id" 
    end 

    add_index "meetings_pairings", ["meeting_id"], name: "index_meetings_pairings_on_meeting_id" 
    add_index "meetings_pairings", ["pairing_id"], name: "index_meetings_pairings_on_pairing_id" 

    create_table "pairings", force: :cascade do |t| 
    t.integer "supervisor_id" 
    t.integer "student_id" 
    t.string "project_title" 
    end 

    add_index "pairings", ["student_id"], name: "index_pairings_on_student_id", unique: true 
    add_index "pairings", ["supervisor_id"], name: "index_pairings_on_supervisor_id" 

我创建了视图和控制器,以使用户(配对中的主管)能够创建一个会议。但是我不知道如何将这个关联添加到连接表中。

meetings_controller.rb

class MeetingsController < ApplicationController 

    def index 
     @meetings = Meeting.all 
    end 

    def new 
     @meeting = Meeting.new 
    end 

    def create 
     @meeting = Meeting.new(meeting_params) 
     if @meeting.save 
     redirect_to meetings_path, :notice => "Meeting Created!" 
    else 
     redirect_to meetings_path, :notice => "Meeting Failed!" 
    end 
    end 

    def show 
    @meeting = Meeting.find(params[:id]) 
    end 

    private 
    def meeting_params 
    params.require(:meeting).permit(:meeting_date, :meeting_time) 
    end 

end 

从视图形式

<%= form_for @meeting do |f| %> 
    <div class="field"> 
    <%= f.label :meeting_date %><br /> 
    <%= f.text_field :meeting_date %> 
    </div> 
    <div class="field"> 
    <%= f.label :meeting_time %><br /> 
    <%= f.time_select :meeting_time, :ampm => true, :minute_step => 30, :default => {:hour => '9', :minute => '0'} %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

这会在会议上表中的条目,所以我的问题是如何让这个条目被制作成连接表与创建会议的当前用户的配对ID?

+0

你们的配对是否始终是一位主管和一位学生?是否总是创建会议的主管?或者学生也可以创建会议? –

+0

你的问题是如何创建一个连接记录?您需要添加的代码位于何处(模型,视图或控制器?) –

+0

@ScottSchupbach学生只能与1位主管配对,主管可以有许多学生。只有主管可以创建与他们配对的学生可以看到并请求的会议 – Yoklan

回答

0

决定使用has_many:through(用户会议用户)关系代替。问题不再相关。