前期試験 ・ 2019 年 7 月 29日 4 時限実施 ・ ページ
授業 科目 |
情報総合プログラミング 実習 II |
学生番号 | 学科 | 学年 | 組 | 番 | フリ ガナ |
評点 | ||||||||
氏名 | ||||||||||||||||
担当者 | DÜRST, Martin J. 莊司・谷津・米澤 |
次の略語の正式名称と、Ruby on Rails に関連する詳しい説明を書きなさい。例を使ってもよい。
REST:
正式名称: Representational State Transfer
詳しい説明: ウェブ全体やウェブアプリの構造・設計のモデル、HTTP により「実装」。
アプリケーションに大事な「資源」 (英: resource; 例: ユーザなど) の情報がそれぞれ
独自の URI によってアクセス可能で、HTTP の GET/PUT/POST/DELETE メソッドに
よって操作可能になる。Ruby on Rails では controller で利用され、対応する
アクションが用意されている。REST の使用によって、アクションや URI の意味、名称、
操作が統一されている。
ORM:
正式名称: Object-Relational Mapper/ing
詳しい説明: データベースとオブジェクト指向言語の間の取次の仕組み
データベースを使う場合、query を SQL 書いて、オブジェクトを「手作業」で作成するのは
大変です。ORM はその変換 (と逆変換) を実装し、非常に使いやすいようにする。一つ一つの
テーブルにクラスを対応させ、テーブルの一つ一つの行にオブジェクト (インスタンス) を対応さ
せている。Rails についている ORM "ActiveRecord" は「設定より規約」を中心に、メタプログラ
ミングを使ってクラスに列ごとのアクセスメソッドなど様々な便利なメソッドを自動的に作成する。
MVC:
正式名称: Model-View-Controller
詳しい説明: ウェブのみならず対話的なアプリに幅広く使われる設計のパラダイム
Rails では MVC 原則に基づいて、Model は ActiveRecord という ORB を使って
データベースとの接続やデータに対するメソッドや validation, モデルの間の関係性を記述。
Controller では public なメソッドがアクションと呼ばれ、外からアクセス可能です。
アクセス制御、出力形式の選択などは controller 中心に行われている。
View は各アクションに対するテンプレートで HTML やその他の形式を作成する。
下記のコード断片をそれぞれを HTML/CSS/Ruby/Ruby on Rails (Rails) に分類し、さらに細かく分類し説明しなさい。
例: movies.each: Ruby, 配列 (Array) の要素一個一個の繰返し
numericality:
Rails, モデルで値が数値であることを検証
text-align:
CSS で文書の揃え方 (左揃え、両端揃え)
assert_equal:
Ruby (Rails を含む) のテストで結果の等しさをチェック
resources:
Rails の routing で REST 用 routing に使用
ol:
HTML で番号付き箇条書き
has_and_belongs_to_many:
Rails, モデルで多対多の関係を示す
前期試験 ・ 2019 年 7 月 29日 4 時限実施 ・ ページ
Ruby on Rails における最も大事な原則の一つに「設定より規約」がある。これについて二つの例を挙げ、細かく説明しなさい。(それぞれ 5点)
例 1:Rails のディレクトリ構造
Rails は全てのアプリケーションにおいて共通のディレクトリ構造を使っています。rails new
コマンドで必要なディレクトリとファイルが自動生成される。app サブディレクトリにはアプリケー
ションの主なファイルが model, controller, view サブディレクトリで配置される。
他の主なディレクトリは db (データベースそのものやデータベースの更新のためのマイグレー
ション) config (routes.rb などの設定)、test (テスト関連) です。
例 2:Rails データベースのテーブル名とクラス名
データベースのテーブル名は小文字で、複数となっています (例: users)。なぜ複数かというと、
テーブルに複数のデータ項目が入っているから複数が自然であるからです。かわりにプラス名
は頭文字が大文字で、単数です (例: User)。Ruby のクラス名は大文字から始めないといけ
ないし、クロスのインスタンスはそれぞれ一個のデータ項目を表しているので、単数が自然。
Rails は少し不規則な単数・複数の変換 (例: libraries ↔ Library) にも対応している。
「設定より規約」の利点について説明しなさい。(4点)
まず「設定より規約」によって、記述の量が減って、そのため開発のスピードが上がる。 次に、規約で決まったものについては命名、場所など悩まなくて済むためも開発のスピードが上がる。 さらに、物の場所や名前が規約によって決まっているため、自分が後日にアプリを変更するとき、他人と共同開発する、 ウェブで問題の解決策を調べる時など有利です。
「設定より規約」の欠点について説明しなさい。(4点)
開発できる前にある程度規約を覚えていないと使えません。
しかし、設定の仕方も覚えてないと使えません。規約と違うことが必要な場合 (例えば古いデータベースへの対応)
葉設定が必要になるが、Rails ではこれもできます。
(例: has_many :jobs, foreign_key: "user_id", class_name: "Task")
あるコマンドを実行したとき、出力の一部として次の二行が出力された。
logout DELETE /logout(.:format)
sessions#destroy
使われたコマンドを書きなさい。rails routes
出力の各部分を説明しなさい。最初の logout は logout_path や logout_uri で使う部分、DELETE は HTTP のメソッド名、/logout は URI の path の部分、括弧内だから任意の .:format は形式を示す拡張子 (.html, .json など)、sessions はコントローラ名、destroy はアクション名です。
この授業で一番分かりにくかったことを書きなさい (決まった正解はありません)
What was most difficult to understand in this course (there is no single answer)
@@@@
この授業で一番勉強になったことを書きなさい (決まった正解はありません)
What was most informative/interesting in this course (there is no single answer)
@@@@
前期試験 ・ 2019 年 7 月 29日 4 時限実施 ・ ページ
授業 科目 |
情報総合プログラミング 実習 II |
学生番号 | 学科 | 学年 | 組 | 番 | フリ ガナ |
評点 | ||||||||
氏名 | ||||||||||||||||
担当者 | DÜRST, Martin J. 莊司・谷津・米澤 |
次のそれぞれのスタイル指定による枠の上下左右の幅、スタイル (点線など)、色を右側の表に記入しなさい。
border: 2pt solid blue; border-top-color: red; border-bottom-style: dashed; border-right-width: 5pt;
上 | 下 | 左 | 右 | |
---|---|---|---|---|
幅 | 2pt | 2pt | 2pt | 5pt |
スタイル | solid | 点線 | solid | solid |
色 | 赤 | 青 | 青 | 青 |
border-color: green blue red; border-width: 1pt 3pt 5pt 10pt; border-style: solid dashed;
上 | 下 | 左 | 右 | |
---|---|---|---|---|
幅 | 1pt | 5pt | 10pt | 3pt |
スタイル | solid | solid | dashed | dashed |
色 | 緑 | 赤 | 青 | 青 |
Ruby で end
で終わる構文構造の最初の予約語を五つ書きなさい。
class, def, do, if, while (case, module, unless, until, for, begin)
下記右側 (一部省略) のようなテーブルを作成する ERB のコード断片を書きなさい。三列からなり、一列目は n、二列目は n2、
三列目は n3 である。n は 1 から 100 までの整数である。テーブルの一行目は表見出である。
<table> <tbody> <tr> <th>n</th> <th>n<sup>2</sup></th> <th>n<sup>3</sup></th> </tr> <% (1..100).each do |n| %> <tr> <td><%= n %></td> <td><%= n*n %></td> <td><%= n**3 %></td> </tr> <% end %> </tbody> </table>
n | n2 | n3 |
---|---|---|
1 | 1 | 1 |
2 | 4 | 8 |
3 | 9 | 27 |
... | ... | ... |
100 | 10000 | 1000000 |
前期試験 ・ 2019 年 7 月 29日 4 時限実施 ・ ページ
new
と create
の役割 (合計 23 点)scaffold
で作製されているコントローラには new
と create
のアクションがある。両方の単語は、それぞれ同様に「新規作成」のような意味をもつ。二つのアクションの役割と、ユーザ (ブラウザ)
側から見た処理の流れ、それぞれどう異なるか説明しなさい。URI、HTTP のメソッドや図を使ってもよい。(10 点)
ブラウザ側 サーバ側 new をクリック → 例えば http://.../movies/new へアクセス (GET) アクション new へアクセス、 new.html.erb のビュー フォームをブラウザに ← (入力フォーム) を作成 表示、ユーザが記入、 サブミット → http://.../movies へ送信 (POST) 入力データのチェック、 新オブジェクトの作成、 データベースに保存 新しく作成したオブジェクト ← show アクションにリダイレクト をブラウザで表示
説明: 上記の図から見えるように、new がサーバからオブジェクト (リソース) 新規作成のための (空の) フォームを入手する。 フォームの投稿先は create アクションであり、そこでオブジェクトが作製され、データベースに追加されます。
movies_controller
の new
アクションが次のようになっている。
アクションの内容と自動的に行われる動作の解説をコードの右側に書きなさい。(5 点)
def new @movie = Movie.new end
メソッド・アクション new は routing によって呼び出され、実行されます。
@movie のインスタンス変数にセットされる新しい Movie オブジェクトは
自動的に呼ばれるビューからもアクセス可能です。
そこでフォームの作成に使われる。新規のオブジェクトなので、
データ項目がなく、フォームの各欄も空になる。
movies_controller
の create
アクションが次のようになっている場合、
以下の問い (9.3、9.4) に答えなさい。
def create @movie = Movie.new(movie_params) respond_to do |format| if @movie.save format.html { redirect_to @movie, notice: 'Movie was successfully created.' } format.json { render :show, status: :created, location: @movie } else format.html { render :new } format.json { render json: @movie.errors, status: :unprocessable_entity } end end end
format
はどのように選択可能かを、例を使って説明しなさい。(4点)
二つの方法がある: 拡張子による選択 (例: index.html, index.json) と HTTP の Accept ヘッダによる選択 (例: Accept: text/html; Accept: application/json)。
@movie.save
の真と偽はそれぞれどのような意味をもつか、説明しなさい。(4点)
真は「問題なくデータベースに保存さてていました」という意味です。偽は何かのトラブル (例えば validation で弾かれたなど) を意味する。
前期試験 ・ 2019 年 7 月 29日 4 時限実施 ・ ページ
授業 科目 |
情報総合プログラミング 実習 II |
学生番号 | 学科 | 学年 | 組 | 番 | フリ ガナ |
評点 | ||||||||
氏名 | ||||||||||||||||
担当者 | DÜRST, Martin J. 莊司・谷津・米澤 |
次の質問 (一部省略) が Q & A フォーラムにだされた。どのように回答すべきか答えなさい。
.to_i
で整数に変換して下さい。end
が一つ (以上) 足りません。どこに追加するか探してください。