参考にした記事URL一覧

基本的なところは小学生でもわかるRuby on Rails入門 | OpenBookをなぞってみる。 ただし、PostgreSQLの既存テーブルを使い、テンプレートにBootstrapを使うので、途中から色々やることが変わっている。

$ rails new bocho

Ruby on Railsを入れてみたに注意点であげたようにGemfileからtherubyracerに関する行をコメントアウトしてbundle install これをしないとrails g controllerコマンドで

autodetect': Could not find a Javascript runtime. ...'

というエラーが出た

$ rails g controller events index show

と入力してビューとコントローラーを作った。これの意味はeventsというコントローラーとindex、showというビューを作る。ビューはスペース区切りで複数書けるみたい。indexはデータ一覧、showは個別データの表示を意味している ファイルとしては

app/controllers/events_controller.rb
app/views/events/index.html.erb
app/views/events/show.html.erb

が出来る。events_controller.rbにはindexとshowメソッドが入っている

確認

$ rails s

でサーバを起動させて、[http://0.0.0.0:3000/events/index]と[http://0.0.0.0:3000/events/show]を確認

Events##index
Find me in app/view/events/index.html.erb

みたいなメッセージが出てたらおk

コントローラー、ビューを修正

ビューって言っていいのかテンプレートなのか良くわからないけどapp/views/events/show.html.erbを修正

<h1><%= @event[:name] %></h1>

これで[http://0.0.0.0:3000/events/show]を確認するとエラーが表示される。

@eventが登録されてないので、コントローラーで登録する

  def show
      @event = Hash.new
          @event[:name] = 'hoge'
  end

これでさっきのURLにアクセスすると

<h1>hoge</h1>

と表示される。なるほど@変数名に値を入れたらテンプレでアクセス出来るようになるのね。

URLにパラメーターを入れる

テーブルのidが1のデータを[http://0.0.0.0:3000/events/show/1]で表示出来るように考える。 そのためにはconfig/routes.rbを

  get "events/show/"
  get "events/show/:eventid" => "events#show"

こうすると上のURLにアクセスするとevents_controller.rbのshowメソッド内でparams[:eventid]に1が入る events_controller.rbを次のように変えると

  def show
      @event = Hash.new
          @event[:name] = params[:eventid]
  end

[http://0.0.0.0:3000/events/show/1]にアクセスすると

<h1>1</h1>

と表示されるようになる。(あくまでこういうコードはテスト用) とりあえずここまで