Rails入門 日程調整アプリを作ろう3
Rails入門 日程調整アプリを作ろう2の続き。
実装 -2-(Schedule,UserSchedule)の1-9です。
1.不要なリンク、Schedule#indexを一旦削除
1-1.Eclipseのジェネレータータブを開き、破棄のラジオボタンを選択、プルダウンにcontroller、テキストボックスにschedule indexを入力し、実行ボタンをクリックします。
2.ScheduleをScaffoldで再作成
2-1.Eclipseのジェネレータータブを開き、作成のラジオボタンを選択、プルダウンにscaffold、テキストボックスにschedule scheduleを入力し、実行ボタンをクリックします。
3.Schedule/listへのlinkをEvent/listに新たに作成
3-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> </tr> <% end %> </table>
サーバーを起動し、http://localhost:3000/event/を表示すると、Schedule_listのリンクが追加されていることが確認できます。
4.Event,Schedule間のassociationを記述する
4-1.「User 1 - n UserSchedule n - 1 Schedule n - 1 Event」の関係をmodelに記述します。/adjuster/app/models/event.rbを編集します。
class Event < ActiveRecord::Base has_many :schedules end
has_manyは複数形だから引数にsを付ける。という考え方でいいのだろうか??
4-2./adjuster/app/models/schedule.rbを編集します。
class Schedule < ActiveRecord::Base belongs_to :event end
eventとscheduleの関係を表しています。
5.UserScheduleのモデルを作成する
5-1.Eclipseのジェネレータータブを開き、プルダウンにmodel、テキストボックスにuser_scheduleを入力し、実行ボタンをクリックします。
6.UserScheduleのカラムを定義する
6-1./adjuster/db/migrate/004_create_user_schedules.rbを編集します。
class CreateUserSchedules < ActiveRecord::Migration def self.up create_table :user_schedules do |t| t.column :user_id, :integer t.column :schedule_id, :integer t.column :attend, :string, :default => '-' end end def self.down drop_table :user_schedules end end
attendのdefault値は後々出てくるInPlaceEditorのためだそうです。
7.Scheduleから不要な(重複した)カラムを削除する
7-1.Schedulesテーブルから、user_id、attendを削除します。/adjuster/db/migrate/002_create_schedules.rbを編集します。
class CreateSchedules < ActiveRecord::Migration def self.up create_table :schedules do |t| t.column :event_id, :integer t.column :schedule_date, :datetime end end def self.down drop_table :schedules end end
7-2.http://127.0.0.1/mysql/を開き、既に作成されているテーブルカラムを削除します。
8.db:migrate
8-1.EclipseのRake タスクタブを開き、db:migrateと入力し、実行ボタンをクリックします。
9.Schedule,User,UserSchedule間のassociationを記述する
9-1./adjuster/app/models/schedule.rbを編集します。
class Schedule < ActiveRecord::Base belongs_to :event has_many :user_schedules has_many :users, :through => :user_schedules end
9-2./adjuster/app/models/user.rbを編集します。
class User < ActiveRecord::Base has_many :user_schedules has_many :schedules, :through => :user_schedules end
9-3./adjuster/app/models/user_schedule.rbを編集します。
class UserSchedule < ActiveRecord::Base belongs_to :user belongs_to :schedule end