• ログインログイン
  • 新規登録新規登録

MENU

文系の私がエンジニアになっていくお話(Ruby on Rails編 第4回)

連載文系の私がエンジニアになっていくお話(Ruby on Rails編)

文系出身学生が、Webサービスやアプリ開発に取り組み、エンジニアになるべくどのように学習を進めていったのかの記録を紹介するコンテンツです。Ruby on RailsでのWebサービス開発の学習手順などを解説しています。

前回までのプログラミング学習コラムに続き4回目の勉強内容です。

文系エンジニアコラムの連載をさせていただいている小林寛和(ひろかず)です。Ruby on Railsのコラムの第4回目となります。今回は前回に引き続き、MVCのモデルを使ってデータを保存したり取ってくる方法を解説していきます。

ブログサービスの裏側

データを保存する

まずはデータの保存方法です。View側のフォームで入力された値を受け取り、POSTメソッドを使ってサーバーサイドに送信、その後対応するControllerで処理を行った後にModelを通してDBに格納します。ドットインストールさんのブログサービス(Ruby on Railsコラム参照)を例に見ていきます。

Viewの中の「new.html.erb」にてブログの内容を入力するフォームを作りました。これをフォームの「Submit」ボタンを押すことでPOSTメソッドを使って送信します。この際、アクションの指定は「:method => “create”」となりました。なお、POSTメソッドが何かは来週以降の連載で触れますが、試しに「rake routes」コマンド(アプリケーションが持つルーティングを確認するコマンド)を打つと、CreateメソッドにPOSTという属性みたいなものが付いているかと思います。

POSTでサーバーサイドに送信されたデータは、コントローラーにて処理されます。今回の場合は、コントローラー内の対応するメソッドである「Createメソッド」の中で処理されます。するとモデルオブジェクトを@postという変数に格納し、保存などが行われている事がわかります。

要するにコントローラー内でモデルを操作し、モデル側でDBの書き換えを行なっているのです。

データを取得する

同じくドットインストールさんのブログサービス(Ruby on Railsコラム参照)を例に見ていきます。showアクションにてブログのデータを取得し、「show.html.erb」で表示しているのがわかります。裏側の処理に関しては第3回の連載と同じなので割愛します。

コントローラー内の「showメソッド」を見ると、@postという変数にpostオブジェクトの前データを格納しているのがわかります。この@が付いた変数をView側で使用し、ユーザーに提示します。

「show.html.erb」を見ると、「@post.title」のように「@オブジェクト名.メソッド名」という書式でデータを取得しています。

応用編

ランキングなどの実装

応用編といっても大したことはありませんが、例えばこのブログにランキング機能を実装するとしたらどうするかを考えてみましょう。

どのような形式でランキングを送信するかは次回の連載で書いていきますが、今回は何らかの形でランキングの数値を持っていて、その内数値の高い(=人気の高い)TOP3をどうユーザーに提示するまで持っていくかを考えてみましょう。

コントローラーを編集する

具体的には、データベースのpostテーブル内にrankingというカラムがあり、それぞれのブログはそこにランキング用の値を持っているとしましょう。

まずコントローラーから作成しましょう。下記のようなメソッドを作成します。

def ranking
	@top_3 = Post.find(:all,:order => "ranking DESC" )
end

Postオブジェクトに対してfindメソッドを実行するまでは同じなのですが、その引数に「:all,:order => “ranking DESC”」という部分があります。これは、データベーステーブルのカラムのrankingをDESC(=降順=大きい順)で並べ、全てのデータを取得するというものです。これでランキング順に並んだモデルオブジェクトを生成しました。

ビューを作成する

次に「ranking.html.erb」を作成します。ここで全て取ってきたモデルオブジェクトから3つだけ表示する記述をします。具体的にはループを3回回してデータを表示させるだけです。

ranking No.=>

文字通り3回ループを回し、カウンタ変数「i」に1を足したものをストリング型にしたものをナンバーとして出力し、その後に@postオブジェクトのi番目の要素のタイトルを取得しています。

ルーティングの設定

最後に「/config/routes.rb」を編集します。適当な場所に「match ‘ranking’ => ‘post#ranking’」と記述する事で、rankingというURLでアクセスされたもしくはアクション指定された場合は、Postコントローラー内のrankingメソッドを実行するようになります。

まとめ

今回はドットインストールのブログサービスの解説と、応用として簡単なランキング機能の追加を行いました。ランキングなどは簡単ですが、少し頭をひねれば色々な応用が考えられることがわかります。

次回予告

次回の連載では、Facebookのいいねボタンのような機能をどうやって実装するかを解説していこうと思います。

オススメ記事一覧

もっと見る
完全無料!

1で登録完了!

エンジニアの仕事・年収や選考ノウハウ記事が読めるほか、
会員にはプログラミング講習やES・面接対策などリアルな無料サポートも充実。
ここだけの求人情報も多数。

今すぐ新規会員登録
Page Top