#子モデルから、親モデルと孫モデルを取得してbuildする方法が知りたい。
各社員がログイン後、今週の予定と曜日・時間を入力→保存できるシステムを作りたいと考えています。
社員(memberモデル)を親にもつ予定(planモデル)、日時(date)があります。
※dateはplanから見たら更に子モデル
member | plan | date |
---|---|---|
id | id | id |
name | member_id | member_id |
- | description | plan_id |
- | - | day_type |
- | - | time |
#質問
①現状、予定を入力するとdateモデル「member_id」だけ入力されずに保存されます。
planから親モデルであるmemberと、子モデルであるdateをbuildする方法を教えて頂けませんでしょうか。
②このモデル設計で、カレンダーに「dateの:day_typeとtime」を元に「memberのname」と「planのdescription」を該当する日時に入力させることはできますでしょうか?
##マイグレーション
ruby:20160803113715_create.member.rb
1class CreateMember < ActiveRecord::Migration 2 def change 3 create_table :Members do |t| 4 t.text :name 5 t.timestamps 6 end 7 end 8end
ruby:20160803113715_create.plan.rb
1class CreatePlan < ActiveRecord::Migration 2 def change 3 create_table :Plans do |t| 4 t.integer :member_id 5 t.text :description 6 t.timestamps 7 end 8 end 9end
ruby:20160803113715_create.date.rb
1class CreateDate < ActiveRecord::Migration 2 def change 3 create_table :Dates do |t| 4 t.integer :member_id 5 t.integer :day_type 6 t.date :time 7 t.timestamps 8 end 9 end 10end
##モデル
ruby:member.rb
1class Member < ActiveRecord::Base 2 belongs_to :company 3 has_many :dates 4 has_many :plans, through: :date 5 accepts_nested_attributes_for :plans
ruby:plan.rb
1class Plan < ActiveRecord::Base 2 belongs_to :member 3 has_many :dates, dependent: :destroy 4 accepts_nested_attributes_for :dates
ruby:date.rb
1class Date < ActiveRecord::Base 2 belongs_to :member 3 belongs_to :plan
##ルーティング
ruby:routes.rb
1Rails.application.routes.draw do 2resources :mambers do 3 resources :plans 4end
##コントローラ
ruby:plans_controller.rb
1class PlansController < ApplicationController 2 def new 3 @member = Member.find(params[:member_id]) 4 @plan = @member.plans.build 5 @plan.dates.build 6 respond_with(@plan) 7 end 8 9 def edit 10 end 11 12 def create 13 @member = Member.find(params[:member_id]) 14 @plan = @member.plans.build(plan_params) 15 @plan.member_id = @member.id 16 17 if @plan.save 18 redirect_to :root, notice: '予定を入力しました' 19 else 20 render :new 21 end 22 end 23 24private 25 def plan_params 26 params.require(:plan).permit(:description, 27 dates_attributes: [:member_id, :plan_id, :day_type, :time]) 28 end
##ビュー(入力画面のみ)
html(ruby):plans/new.html.erb
1<h1><%= @member.name %>さんの予定入力</h1> 2<%= render 'form' %>
html(ruby):plans/_form.html.erb
1<%= simple_form_for([@member, @plan]) do |f| %> 2 <div class="form-inputs"> 3 <%= f.input :description %> 4 </div> 5 6 <%= f.fields_for :dates do |f| %> 7 <%= render partial: 'dates', locals: {f: f} %> 8 <% end %> 9 10 <div class="form-actions"> 11 <%= f.button :submit %> 12 </div> 13<% end %> 14
html(ruby):_dates_html.erb
1<div class="form_time_selects"> 2 <%= f.label :day_type %></li> 3 <ul> 4 <li>毎日: <%= f.radio_button 'day_type', '0', {} %></li> 5 <li>月: <%= f.radio_button 'day_type', '1', {} %></li> 6 <li>火: <%= f.radio_button 'day_type', '2', {} %></li> 7 <li>水: <%= f.radio_button 'day_type', '3', {} %></li> 8 <li>木: <%= f.radio_button 'day_type', '4', {} %></li> 9 <li>金: <%= f.radio_button 'day_type', '5', {} %></li> 10 <li>土: <%= f.radio_button 'day_type', '6', {} %></li> 11 <li>日: <%= f.radio_button 'day_type', '7', {} %></li> 12 </ul> 13 <ol> 14 <li><%= f.time_select :time, minute_step: 10, include_blank: true %></li> 15 </ol> 16</div>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/15 16:18
2016/10/15 22:55