Railsに関する外部サイト

Railsのインストール

 gemを使います。

$ gem install rails

Railsアプリケーションの作成

 Railsをインストールした後,railsを使います。

$ rails new [プロジェクトのルートディレクトリ(例 ./testprj)]
      create
      create  README.md
      create  Rakefile
      create  config.ru
...
         run  bundle install
...
Fetching gem metadata from https://rubygems.org/..........
Fetching version metadata from https://rubygems.org/..
Fetching dependency metadata from https://rubygems.org/.
Resolving dependencies...
Using rake 12.0.0
Using concurrent-ruby 1.0.5
...
Bundle complete! 15 Gemfile dependencies, 62 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
         run  bundle exec spring binstub --all
* bin/rake: spring inserted
* bin/rails: spring inserted

モデル・コントローラー・ビューの作成

 railsでscaffoldを作成します。

 scaffoldは「(建設現場などの)足場」という意味で,MVCやデータベースマイグレーション,テストコードを一度に作ってくれます。

$ rails generate scaffold Student name:string
Running via Spring preloader in process *****
      invoke  active_record
      create    db/migrate/2017**********_create_students.rb
      create    app/models/student.rb
      invoke    test_unit
      create      test/models/student_test.rb
      create      test/fixtures/students.yml
      invoke  resource_route
       route    resources :students
      invoke  scaffold_controller
      create    app/controllers/students_controller.rb
      invoke    erb
      create      app/views/students
      create      app/views/students/index.html.erb
      create      app/views/students/edit.html.erb
      create      app/views/students/show.html.erb
      create      app/views/students/new.html.erb
      create      app/views/students/_form.html.erb
      invoke    test_unit
      create      test/controllers/students_controller_test.rb
      invoke    helper
      create      app/helpers/students_helper.rb
      invoke      test_unit
      invoke    jbuilder
      create      app/views/students/index.json.jbuilder
      create      app/views/students/show.json.jbuilder
      create      app/views/students/_student.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/students.coffee
      invoke    scss
      create      app/assets/stylesheets/students.scss
      invoke  scss
   identical    app/assets/stylesheets/scaffolds.scss

 フィールドの型にはデータベースのカラムの型を用います。使用頻度が高そうなものを以下に示しておきます。使用できる型はSQLで定義されているものになるようです。

カラム型 意味
string

文字列
text

長い文字列
integer

整数
float

実数
datetime

日時
boolean

論理値

外部参照の作成

 フィールドの型をreferencesまたはbelongs_toにします(referencesbelongs_toのエイリアスです)。

$ rails generate scaffold [モデル名(単数形)] [フィールド(例 app:references company:references)]

 フィールド名にはモデル名(単数形)を設定します。データベースには,モデル名_idというカラムが作成されるほか,インデックスも追加されます。

サーバーの起動

 railsを使用。

$ rails server

 特に設定しなければ,localhostのポート3000で接続を待つようになります。

 ウェブブラウザでhttp://localhost:3000にアクセスすると,サーバーでは接続を受け付けたログが表示されます。

Started GET "/" for ::1 at 20**-**-** **:**:** +0900
  ActiveRecord::SchemaMigration Load (0.4ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by Rails::WelcomeController#index as HTML
  Parameters: {"internal"=>true}
  Rendering /.../templates/rails/welcome/index.html.erb
  Rendered /.../templates/rails/welcome/index.html.erb (3.7ms)
Completed 200 OK in 42ms (Views: 20.5ms | ActiveRecord: 0.0ms)

モデルの表示

 scaffoldで作成したモデルについては,ルーティングなども設定されているため,すぐにモデルの一覧表示や追加修正を行うことができます。

 ウェブブラウザでhttp://localhost:3000/[モデルの複数形]にアクセスします。

 たとえばCatモデルを作成していた場合,アドレスはhttp://localhost:3000/catsになります。サーバー側には実行されたSQLやレンダリングに使ったページのパスなどが表示されます。

[su_heading]モデルへのフィールドの追加[/su_heading]

 作成済のモデルに新しいフィールド(データベースのカラム)を追加する場合もrailsを使う。

$ rails generate migration Add[フィールド名]To[モデル名(単数形)] [フィールド名]:[カラム型]

 たとえばCatモデルにPersonモデルへの参照を追加するときは,次のようにします。

$ rails generate migration AddPersonToCat person:references

 このコマンドが追加するのはマイグレーションのみなので,適宜,ビューやモデルを修正する必要があります。

class Cat < ApplicationRecord
  belongs_to :person
end

class Person < ApplicationRecord
  has_many :cats
end

静的ページの作成

 完全に静的なページを作成するには,publicディレクトリの中にHTMLファイルを作成します。たとえば public/index.html を作成すれば,ウェブブラウザからhttp://localhost:3000/でアクセスすると,そのファイルが読み込まれます。

 Rubyコードを埋め込みたいような場合は,コントローラーを介して表示させるようにします。そのためには,railsコマンドでコントローラーを作成します。

$ rails generate controller StaticPages home help

 このコントローラーに対応するビューは,モデルを読み込まないので,ほぼ静的ページと同じように動作させることができます。

 ルートURLで表示するページを指定する場合,public/index.htmlを作成するか(Webサーバーがデフォルトでindex.htmlを読み込むような設定になっていることが前提です),ルーティングでrootを使って設定する必要があります。

Rails.application.routes.draw do
  root :to => 'static_pages#home'
  # または
  root :controller => 'static_pages', :action => 'home'

 なお,Railsでは,大文字で始まる英単語を組み合わせている場合,小文字に変換してアンダーライン(_)で接続した名前に変換してくれます。余計なお世話かもしれませんが,このような命名規則になっているので,おとなしく従いましょう。

レイアウトの編集

 scaffoldを作成すると,app/viewの下にerbファイルの入ったディレクトリが作成されます。このerbファイルは,そのまま表示されるわけではなく,レイアウトテンプレートを通して表示(正確にはHTMLの作成)されます。

 デフォルトではapp/views/layouts/application.html.erbが使用されます。このファイルを変更すれば,デフォルトを使っているビューはすべて変更を受けます。

スタイルシート

 Railsでは,アセットパイプラインという機能を使って,スタイルシートやJavaScriptを管理しています。
 細かいことは省きますが,多人数で開発しやすいよう,スタイルシートやJavaScriptを分割して各々編集できるようにし,実行段階で一気に読み込んで統合するという機能です。
 そのため,スタイルシートはテンプレートのerbファイルとは別の場所に配置されます。

 例としてStaticPagesコントローラーに対応するスタイルシートを挙げると,以下のようになります。

// Place all the styles related to the StaticPages controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

div.footer {
        width: 80%;
        padding-left: 10%;
        padding-right: 10%;
}