2015-06-19 33 views
0

我有3個表:成員,會議,meeting_has_members。 型號有:使用嵌套的表格軌創建對象

member.rb

class Member < ActiveRecord::Base 

has_many :meeting_has_members 
has_many :meetings, through: :meeting_has_members 

accepts_nested_attributes_for :meeting_has_members 
accepts_nested_attributes_for :meetings 

meeting.rb

class Meeting < ActiveRecord::Base 

has_many :meeting_has_members 
has_many :members, through: :meeting_has_members 

accepts_nested_attributes_for :meeting_has_members 
accepts_nested_attributes_for :members 

meeting_has_member.rb

class MeetingHasMember < ActiveRecord::Base 

belongs_to :member 
belongs_to :meeting 

我想要做的是,在創建會議時,能夠向其添加成員,並在提交時創建關係meeting_has_member。 表meeting_has_members有2列:member_id,meeting_id。

多數民衆贊成在meeting_controller:

meeting_controller.rb

class MeetingsController < ApplicationController 

    before_action :set_meeting, only: [:show, :edit, :update, :destroy] 

    def index 
    @meetings = Meeting.all 
    end 

    def show 
    end 

    def new 
    @meeting = Meeting.new 
    @meeting_has_members = @meeting.meeting_has_members.build 
    end 

    def edit 
    end 

    def create 
    @meeting = Meeting.new(meeting_params) 

    respond_to do |format| 
     if @meeting.save 
     format.html { redirect_to @meeting, notice: 'Meeting was successfully created.' } 
     format.json { render :show, status: :created, location: @meeting } 
     else 
     format.html { render :new } 
     format.json { render json: @meeting.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def update 
    respond_to do |format| 
     if @meeting.update(meeting_params) 
     format.html { redirect_to @meeting, notice: 'Meeting was successfully updated.' } 
     format.json { render :show, status: :ok, location: @meeting } 
     else 
     format.html { render :edit } 
     format.json { render json: @meeting.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def destroy 
    @meeting.destroy 
    respond_to do |format| 
     format.html { redirect_to meetings_url, notice: 'Meeting was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 

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

    def meeting_params 
    params.require(:meeting).permit(:meeting_name, :meeting_description, :meeting_date, :agenda_id, 
            meeting_has_members_attributes: [:id], 
            members_attributes: [:id]) 
    end 

end 

並創建會議的形式是:

會議/ _form.html.erb

<%= form_for(@meeting) do |f| %> 
    <% if @meeting.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@meeting.errors.count, "error") %> prohibited this meeting from being saved:</h2> 

     <ul> 
     <% @meeting.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
<% end %> 

    <div class="field"> 
    <%= f.label :meeting_name %><br> 
    <%= f.text_field :meeting_name %> 
    </div> 
    <div class="field"> 
    <%= f.label :meeting_description %><br> 
    <%= f.text_field :meeting_description %> 
    </div> 
    <div class="field"> 
    <%= f.label :meeting_date %><br> 
    <%= f.date_select :meeting_date %> 
    </div> 
    <div class="field"> 
    <%= f.label :agenda_id %> 
    <%= f.select :agenda_id, Agenda.all.collect { |p| [p.agenda_name, p.id] } %> 
    </div> 
    <%= f.fields_for :meeting_has_members do |builder| %> 
    <%= builder.label :member_id %> 
    <%= builder.select :member_id, Member.all.collect { |m| [m.member_name, m.id] }%> 
    <% end %> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

當我提交時,它會在meeting_has_members表的meeting_id上創建,但它不會爲member_id設置值,應該在嵌套表單中選擇該值。

任何人都可以幫助我嗎?

回答

1

meeting_params應該是這樣的,我在meeting_has_members_attributes添加:member_id和刪除members_attributes你不是爲他們節省這

def meeting_params 
    params.require(:meeting).permit(:meeting_name, :meeting_description, :meeting_date, :agenda_id, meeting_has_members_attributes: [:id, :member_id]) 
end 

通知。

+0

Thx !!!真的很感謝幫助! –