Create  Edit  Diff  FrontPage  Index  Search  Changes  History  Source  RSS  Note  wikifarm  Login

Rails' Wiki - AdjusterTutorial-0007 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

{{toc}}


'''今回分実装済みのサンプル:{{attach_anchor(adjuster.zip}}'''*注意!!日程調整アプリを拡張しよう-1-も実装済です。

!実装 -5-
!!作成手順
今回は1.2系から2.0系へのアップグレードを行います。また副産物として?in_place_editorをさらに便利にします。

今回実装する内容、手順を、以下に示します。

#SQLのミスを修正
#gemのアップデート
#rails1.2.6のインストール
#ログを確認(deprecation warning)
#rails2.0.2のインストール
#config/environment.rbの修正
#rake rails:update
#config/environment.rbに追加
#paginating_findプラグインのインストール
#super_inplace_controllsプラグインのインストール
#BASIC認証の変更

!!SQLの抜け(ミス)を修正
日程調整の画面でまだSQLに問題がありましたので、まずそこを修正します。

何が問題だったのかというと、並び順を指定していなかった、です。

前回マトリックスの日付(Schedule)は並び順を指定しました。

しかし、各自の予定(user_schedules)は並び順が指定されていません。ですので、予定月日を作成するときに、古い日付を先に入れたりすると、日付と予定が合わなくなってしまいます。

{{attach_view(07-001s.gif)}}

並び順を追加してやればいいわけですが、この場合必要な項目はScheduleの日付です。
しかし、今のSQLはschedulesをJOINしていません。

{{attach_view(07-002s.gif)}}

再度schedulesをJOINした上で、schedulesの日付を並び順として付与してやります。

・・・と、ここまで考えてはたと気づきました。[[日程調整アプリを作ろう-4-|AdjusterTutorial-0004]]でこのSQLを作成した時にCascaded Eager Loadingを使うのを忘れてました!!

app/controllers/user_schedule_controller.rbを以下のように修正します。

{{attach_view(07-003s.gif)}}

Cascaded Eager Loadingを使えば、ちゃんと絞込されるので、そもそもINを使う必要はなかったですね・・・。

!!gemのアップデート
気を取り直して先に進みましょう。2.0系に移行するに当たって、まずgemをアップデートします。

InstantRailsのメニューから”Rails Applications→Open Ruby Console Window”と選択、クリックします。

{{attach_view(ir105.gif,AdjusterTutorial-0004)}}


”gem update --system”と入力して実行します。

{{attach_view(07-002.gif)}}


!!rails1.2.6のインストール
InstantRails1.7に入っているrailsのバージョンは1.2.3です。

{{attach_view(07-001.gif)}}

1.2.6にバージョンを上げると、2.0系で、非推奨のものは警告がログに表示されるようになります。そのため、まずはrails1.2.6をインストールします。

"gem install rails -v 1.2.6"と入力して実行します。

{{attach_view(07-003.gif)}}

adjusterを1.2.6に切り替えましょう。config/environment.rbの1.2.3となっている箇所を1.2.6に変更します。

{{attach_view(07-004.gif)}}

!!ログを確認(deprecation warning)
サーバーを立ち上げて一通り操作します。
log/development.logを開いて、確認してみましょう。

{{attach_view(07-005.gif)}}

ページネートが本体から切り離されて、プラグインになったようです。プラグインの入手先も表示されていますね。

それからログでは確認出来なかったですが、in_place_edit_forとin_place_edit_fieldもプラグイン化されています。こちらはリファレンスで確認出来ます。

{{attach_view(07-006.gif)}}

{{attach_view(07-007.gif)}}

!!rails2.0.2のインストール
移行時に修正が必要な部分がわかりましたので、Rails2.0.2をインストールして、いよいよ実際の移行作業に移りましょう。

"gem install rails"と入力し、実行します。


{{attach_view(07-008.gif)}}

!!config/environment.rbの修正
adjusterを2.0.2に切り替えましょう。config/environment.rbの1.2.6となっている箇所を2.0.2に変更します。

{{attach_view(07-009.gif)}}

!!rake rails:update
config/boot.rbが2.0系になってから変わっている為、これを変更しなければなりません。

rakeにこれをアップデートするタスク、rake rails:update:configsがあるのでこれを実行すれば良いのですが、ついでにjavascripts等もアップデートすることにします。

"rake rails:update"と入力し、実行します。

{{attach_view(07-010.gif)}}

!!config/environment.rbに追加
一旦ここでサーバを立ち上げてみましょう。

{{attach_view(07-011.gif)}}

エラーになってしまいました。log/development.logを開き、確認してみましょう。

{{attach_view(07-012.gif)}}


丁寧にメッセージが表示されていますので、その表示に従って、config/environment.rbに以下のように追加します。

画像では、そのまま追加していますが、:secretは適宜修正して追加してください。

{{attach_view(07-013.gif)}}

!!paginating_findプラグイン
!!!インストール
これで、無事Menuは表示出来たかと思います。しかし、UserとEventのlistに遷移しようとすると当然・・・

{{attach_view(07-014.gif)}}

エラーが表示されます。ページネートが本体から無くなっている為ですね。

さっそくページネートプラグインをインストールしましょう。

ログに表示されていたclasic_paginationプラグインをインストールすると、実はこれも非推奨だよと出てきます。

代替えとして示されているのは2つ、will_paginateとpagination_findがあります。

どちらでも構わないかと思いますが、今回はpagination_findを使ってみることにします。

Adjusterプロジェクトのディレクトリに移動し、"ruby script/plugin install http://svn.cardboardrocket.com/paginating_find"と入力し、実行します。

{{attach_view(07-015.gif)}}

!!!controllerの修正
app/controllers/event_controller.rbを以下のように修正します。なお、詳細はpaginating_findのREADME、リファレンスを参照下さい。

{{attach_view(07-016.gif)}}

同様に、user_controller.rbを以下のように修正します。

{{attach_view(07-018.gif)}}

!!!views/listの修正
app/views/event/list.rhtmlを以下のように修正します。メソッドの詳細はREADME、リファレンスを参照下さい。

{{attach_view(07-017.gif)}}

同様にapp/views/user/list.rhtmlを以下のように修正します。

{{attach_view(07-019.gif)}}

確認してみましょう。プラグインをインストールしているので、サーバの再起動を忘れずに。


{{attach_view(07-020.gif)}}

OKですね。

!!super_inplace_controllsプラグインのインストール
日程調整画面を開こうとすると、in_place_editorが本体から分離されているので・・・

{{attach_view(07-021.gif)}}

当然、エラーになります。

in_place_editorのプラグインをインストールします。いくつかあるのですが、super_inplace_controllsというプラグインを使ってみましょう。

"ruby script/plugin install http://super-inplace-controls.googlecode.com/svn/trunk/super_inplace_controls/
"と入力し、実行します。

{{attach_view(07-022.gif)}}

in_place_edit_forは同じメソッドがありますので、user_schedule_controller.rbの修正は必要ありません。

app/views/user_schedule/list.rhtmlを以下のように修正します。

{{attach_view(07-022-1.gif)}}

これで、表示されるようになったかと思います。しかし、データを更新しようとすると・・。

{{attach_view(07-023.gif)}}

{{attach_view(07-024.gif)}}

RJSのエラーとなってしまいます。super_inplace_controllsは、idかclassがerror_messagesのタグにエラーメッセージを表示するようになっており、正常更新時にはこのエレメントをhideしようとします。

タグを用意しなかったのでエラーになったんですね。

list.rhtmlに以下のようにタグを追加します。

{{attach_view(07-025.gif)}}

これで正常に動作するようになりました。さて、super_inplace_controllsは、in_place_editorを多機能にしたプラグインになっています。

せっかくなので、○、△、×、?等の選択肢から選択出来るようにしましょう。

以下の用に修正します。

{{attach_view(07-026.gif)}}

確認してみます。OKですね。


{{attach_view(07-027.gif)}}

!!BASIC認証の変更
2.0系への移行は一応完了ですが、htpasswdプラグインで実現したBASIC認証の機能は、Rails2.0系では標準で用意されています。

前回入れたばかりですが、標準のものに切り替えます。

app/controllers/application.rbを以下のように編集します。

{{attach_view(07-028.gif)}}

htpasswdを削除します。"ruby script/plugin remove htpasswd"と入力し、実行します。

{{attach_view(07-029.gif)}}

!!次は?
次回はメール配信、テスト、日本語化のいずれかを行います。
||[[目次|AdjusterTutorial]]||[[前ページへ|AdjusterTutorial-0006]]||[[次ページへ|AdjusterTutorial-0008]]||