Rails入門 日程調整アプリを作ろう5

Rails入門 日程調整アプリを作ろう4の続き。
実装 -2-(Schedule,UserSchedule)の11-15です。

11.UserScheduleのコントローラーを作成する(日程調整画面)

11-1.Eclipseのジェネレータータブを開き、プルダウンにcontroller、テキストボックスにuser_schedule listを入力し、実行ボタンをクリックします。

12.UserSchedule/listへのlinkをEvent/listに新たに作成

12-1./adjuster/app/views/event/list.rhtmlを開き、table部分を以下のように記述します。

<table>
  <tr>
  <% for column in Event.content_columns %>
    <th><%= column.human_name %></th>
  <% end %>
  </tr>
  
<% for event in @events %>
  <tr>
  <% for column in Event.content_columns %>
    <td><%=h event.send(column.name) %></td>
  <% end %>
    <td><%= link_to 'Show', :action => 'show', :id => event %></td>
    <td><%= link_to 'Edit', :action => 'edit', :id => event %></td>
    <td><%= link_to 'Destroy', { :action => 'destroy', :id => event }, :confirm => 'Are you sure?', :method => :post %></td>
    <td><%= link_to 'Schedule_list', :controller => 'schedule', :action => 'list', :id => event %></td>
    <td><%= link_to 'attend', :controller => 'user_schedule', :action => 'list', :id => event %></td>
  </tr>
<% end %>
</table>

13.UserScheduleコントローラーのlistにマトリックス表示に必要な処理を記述

13-1./adjuster/app/controllers/user_schedule_controller.rbを編集します。

<table>
class UserScheduleController < ApplicationController
  def list
    @event = Event.find(params[:id])
    @schedules = @event.schedules
    @users = User.find(:all,
                     :include => [:user_schedules, :schedules],
                     :conditions => ["schedules.event_id = ?", @event.id])
  end
end

この時点では、@usersを取得するところにミスがあるそうです。

14.UserScheduleのviews/list.rhtmlに、マトリックス表表示の処理を記述

14-1./adjuster/app/views/user_schedule/list.rhtmlを修正します。

<h1><%=h @event.name %> UserSchedule#list</h1>
<table>
	<tr>
		<th>Name</th>
		<% for schedule in @schedules %>
			<th><%=h schedule.schedule_date.strftime("%m/%d") %></th>
		<% end %>
	</tr>
	<% for user in @users %>
		<tr>
			<td><%=h user.name %></td>
			<% for user_schedule in user.user_schedules %>
				<td><%=h user_schedule.attend %></td>
			<% end %>
		</tr>
	<% end %>
</table>

15.User,Schedule作成時、UserScheduleを作成する処理を記述

15-1./adjuster/app/models/user.rbを編集します。

class User < ActiveRecord::Base
  has_many :user_schedules, :dependent => :destroy
  has_many :schedules, :through => :user_schedules
  after_create :create_user_schedule
  def create_user_schedule
    Schedule.find(:all,
                  :conditions => ["schedule_date >= ?", Time.now.beginning_of_month]).each do |schedule|
      self.schedules << schedule
    end
  end
end

:dependent => :destroyで、userをdestroyした時にuser_schedulesもdestroyされるようになります。
self.schedules << scheduleがなぁ、いまいちわからない。。


15-2./adjuster/app/models/schedule.rbを編集します。

class Schedule < ActiveRecord::Base
  belongs_to :event
  has_many :user_schedules, :dependent => :destroy
  has_many :users, :through => :user_schedules
  after_create :create_user_schedule
  def create_user_schedule
    User.find(:all).each do |user|
      self.users << user
    end
  end
end


15-3.既に登録されている情報を全て削除し、Event、User、Scheduleを入れなおします。




とりあえず日程調整画面の表示まできました。


続きはこちら