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


続きはこちら