wired raven : Automatic Wing

文字通りの日記。主に思ったことやガジェットについて

今日のRailsチュートリアル

つまずいたところ

第1章 ゼロからデプロイまで - Railsチュートリアル

  • heroku loginで躓く
    • ターミナルを覗くとログイン用のURLとWarning: Cannot open browser.のメッセージ
    • URLを開いて、すでに用意してあったHerokuアカウントでログインすると、すんなりログインが終わった

演習

2章の演習

  1. 図 2.11を参考にしながら、/users/1/edit というURLにアクセスしたときの振る舞いについて図を書いてみてください。
    • 後述
  2. 図示した振る舞いを見ながら、Scaffoldで生成されたコードの中でデータベースからユーザー情報を取得しているコードを探してみてください。
    • models/user.rb
  3. ユーザーの情報を編集するページのファイル名は何でしょうか?
    • views/users/edit.html.erb

1.

  1. ブラウザから「/users/1/edit」というURLのリクエストをRailsサーバーに送信する
  2. 「/users/1/edit」リクエストは、Railsのルーティング機構によって、Usersコントローラ内のeditアクションに割り当てられる
  3. editアクションの前にset_userアクションが実行され、「指定のユーザをとりだせ」(User.find(params[:id]))と問い合わせる。この場合はユーザID: 1
  4. Usersモデルは問い合わせを受け、ユーザID: 1のユーザw-をデータベースがら取り出す
  5. データベースから取り出されたユーザーをUserモデルからコントローラに返す
  6. Usersコントローラーは、ユーザーを@users変数に保存し、editビューに渡す
  7. editビューが起動し、ERBを実行して、HTMLを生成する
  8. コントローラは、ビューで生成されたHTMLを受け取り、ブラウザに返す

editアクションの中身がわからない

例としてあげられているindexアクションだと、

  def index
    @users = User.all
  end

で、editは

  def edit
  end

だけ。

users_controller.rbをよく見ると、頭のほうで

before_action :set_user, only: [:show, :edit, :update, :destroy]

と定義されている。

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def user_params
      params.require(:user).permit(:name, :email)
    end

パラメータで渡されたユーザーIDで検索する処理が先には入るのか。

進捗

課題

  • ブログに書くのだからフォーマットを考えたい
  • 演習の答えあわせができてない。そろそろ答えに確信が持てなくなってきた。答え合わせをしたいが……
  • 2時間ぐらいが限界。最初の1時間は健全な集中の仕方で、後半はやや自棄になった感じの集中だった。休憩はさんだりしたら、リラックスして挑めるのだろうか?