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

MENU

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

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

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

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

コラムの連載をさせていただいている小林寛和(ひろかず)です。Ruby on Railsのコラムの第10回目となります。今回はモデルを切り分けて設計を最適化しましょう。

モデルの切り分け

新しいモデルを作成する

ドットインストールさんのコメント機能作成を思い出して下さい。同じ要領で商品管理のテーブルとモデルを作成し、既存のモデルと関連付け、コントローラーとビューで処理を行なっていきます。

まずはモデルを作成し、データベースと結びつけましょう(=migrate)。モデルを作成するコードは下記の通りでした。

rails g model Mobile name:string price:integer
rake db:migrate

コントローラーの作成

モデルが作成できたら、今度はコントローラーを作成しましょう。下記のコマンドを実行して下さい。

rails g controller mobiles

モデルを既存のShopモデルと関連付ける。

新しいMobileモデルを作成したら、それを既存のShopモデルと結びつけます。その前にまずはルーティングの変更をしましょう。config/routes.rbの編集です。

下記のように変更します。

resources :shops do
  resources :
end

次にモデルの編集です。app/models/mobile.rbを変更します。

belongs_to :shop

を追記して、Shopモデルに関連付けます。また、どうディレクトリ内のshop.rbも編集します。

has_many :mobiles

こうすることで、mobileモデルはshopモデルに関連づくことが出来、shopモデルは1対多の関係でmobilesと関連づくことが出来ました。一対多の関係については下の方で説明します。

コントローラーとビューの編集

これで晴れてモデルが実装できたので、第8回で書いたコントローラーとビューのコードを使って実装を行なってみましょう。まずはコントローラーです。

def show
	@shop = Shop.find(params[:id])
	@mobiles = Shop.find(params[:id]).mobiles
end

次にビューです。(show.html.erb)

<% @mobiles.each do |mobile| %>
 <p>name: <%= mobile.name %>, price: <%= mobile.price %>.</p>
<% end %>

これで実装完了です。

検証してみましょう

rails consoleのコマンドでshop = Shop.find(idの番号)を実行し、shop.mobilesにデータを代入し、実際に表示されるか試してみましょう。

また、rails consoleで代入もできますが、データの検証用に「ホームディレクトリ/db/seeds.rb」を編集し、rake db:seedを実行すれば簡単にテスト用の値を設定することが出来ます。非常に便利です。

一対多の関係について

1つのモデルに対して複数の存在がありうる物を一対多の関係と言います。例えば1つのブログ記事は複数のコメントを持つことから、それは一対多の関係であると言えます。

今回のmobilesもShopモデルに対して複数個の存在であるので、一対多の関係です。当然一対多の関係以外には一対一の関係というのもあります。has_manyのところをhas_oneに変えるだけで簡単に実装することが出来ます。

まとめ

検証できたでしょうか?第8回と一緒に見なおして、設計がシンプルかつ拡張性の高いものになったことを確認して下さい。このようにRailsの便利な機能を使うことで、簡単に設計の改善を行うことができます。

是非Railsのリファレンスやrails consoleでオブジェクトを沢山引っ張り出して、puts obj.methods等を実行し、railsの理解を深めて行きましょう。

完全無料!

1で登録完了!

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

今すぐ新規会員登録
Page Top