25
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ruby On RailsでWebアプリ作成

Last updated at Posted at 2015-01-27
自分なりのまとめです。
参考にしていただければ幸いですが、参考にして不具合等が起きた場合、保障はできませんのであしからず。
間違い等あればご教授いただけると助かります。

下準備

開発環境作成

・Railsのインストール

Windows :
 1.RailsInstaller/enからセットをインスト
   または、RailsInstallerから「RubyInstaller」と「DEVELOPMENT KIT」をそれぞれインスト
   ※下の方は手間がかかります。が、rubyのバージョンをプロジェクト毎に変えたい時などは
    便利なのかもしれませんね。(環境変数変えるだけなはずなので)
 2.Gitが入っていなければインスト
 3.Node.jsが入っていなければインスト(恐らく)
 
Ubuntu :
1.Gitが入っていなければインスト
   apt-get install git
 2.Ubuntuには元々Rubyの1.9.3がインストされていて、今のままだと
   新しいバージョンをインストしても古いRubyが動いちゃうので、
   OS起動時に新しい方のRubyが使用されるように設定
   …と、手順がいくつかあるのでこちらの サイト様 を参考にお願いします。

 3.後々必要になるパッケージをインスト
 ・sqlite
  yum install sqlite-devel' or 'apt-get install libsqlite3-dev
 ・node.js
  yum install nodejs or apt-get install nodejs

・Sublime Text3にプラグイン追加

 SublimeCodeIntel : クラスやメソッドなどの入力補完をしてくれる。

Ruby学習サイト

 私はRuby初心者なのでCodecademyで学習しました。
 今現在70%の進み具合ですが、後は習うより慣れろだとも思うのでRailsに入っちゃいます。

シンプルなWEBアプリ作成

参考サイト様:小学生でもわかるRuby on Rails入門

Railsのベースファイルを作成

rails new sampleProject
コマンドを打った場所にsampleProjectというディレクトリが作成され、その中にベースとなるファイル群が作成されました。

ビューとコントローラの追加

コマンドから追加

cmd(私はGitBush)から下記のコマンドを打つ。
rails g controller users index show
参考サイト様と同様にusersというコントローラとindex,showというビューを作成しました。
いくつかのファイルが出来ましたね。

DL is deprecated, please use Fiddle
      create  app/controllers/users_controller.rb
       route  get "users/show"
       route  get "users/index"
      invoke  erb
      create    app/views/users
      create    app/views/users/index.html.erb
      create    app/views/users/show.html.erb
      invoke  test_unit
      create    test/controllers/users_controller_test.rb
      invoke  helper
      create    app/helpers/users_helper.rb
      invoke    test_unit
      create      test/helpers/users_helper_test.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/users.js.coffee
      invoke    scss
      create      app/assets/stylesheets/users.css.scss

※ここで以下のエラーが発生(2015/7/27 追記)

    Sorry, you can't use byebug without Readline. To solve this, you need to
    rebuild Ruby with Readline support. If using Ubuntu, try `sudo apt-get
    install libreadline-dev` and then reinstall your Ruby.

Gemファイルに以下の一行を追記して bundle install でおk。

gem 'rb-readline'

参考サイト:CentOSにruby on railsをインストールする

作成したページを確認

ページが出来ているかどうかを確認する為に、下記のコマンドでサーバーを立ち上げる。
rails server
rails sでも可。この状態でウェブブラウザから http://0.0.0.0:3000/users/index にアクセス!

 Windows:
  繋がりませんでした。cmdじゃエラーは吐かれてない。
  ここのサイト様で原因?が見つかりました!

  ipconfigと打って、ローカルエリア接続セクションのIP Address・・・が無かったので、ネットワーク接続のIPv4アドレスを使って、ここの部分を書き換えてアクセス!
  http://ここ:3000/users/index
  無事繋がりました^^

  というかhttp://localhost:3000/users/indexでいけました。

 Ubuntu:
  何の問題もなく繋がりました。

データベース(SQLite)

DBの作成

下記コマンドを打ち込むだけ。
rake db:create

テーブルの作成

rails g model [テーブル名] [フィールド名:型]


rails g model user name:string username:string location:string about:text

※ id:INTEGER,create_at:DATETIME,update_at:DATETIME は自動で作成されます。

db/migrate の下を確認すると、先ほどのコマンドで生成されたテーブル作成のSQLファイルがあります。それを下記のコマンドで実行。
rake db:migrate
※この時に、フィールドの修正をしたくなったら、生成されたファイルを修正し、
 rake db:migrate:resetで始めから作成しなおしできます。オプションでファイルの指定もできるそうです。
 参考:rake db:migrate

初期データの反映

変数 = モデル名.new
変数.フィールド名 = "データ"
変数.save
の形で初期データをセットするseeds.rbに記述。

db/seeds.rb

@user = User.new
@user.name = 'Ryo Suzuki'
@user.username = 'ryooopan'
@user.location = 'Kanagawa, Japan'
@user.about = 'Hello, I am Ryo. I am from database!'
@user.save

@user = User.new
@user.name = 'Shohei Aoki'
@user.username = 'moyahima'
@user.location = 'Tottori, Japan'
@user.about = 'Nice to meet you. I am from database!'
@user.save

コマンドで実行
rake db:seed
※何度も流すと同じデータがどんどん作成されるから注意!

データの受け渡し

ControllerからView

users_controller.rb
class UsersController < ApplicationController
  def index
    # 追記ここから---▽
   @user = Hash.new
   @user[:name] = "Sato Taro"
    # 追記ここまで---△
  end

  def show
  end
end

index.html.erb

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

URLパラメータからController

routes.rb

SampleProject::Application.routes.draw do
  get "users/index"
  # 追記ここから---▽
  get "users/show/:username" => "users#show"
  # 追記ここまで---△


end

users_controller.rb
class UsersController < ApplicationController
  def index
   @user = Hash.new
   @user[:name] = "Sato Taro"
  end

  def show
    # 追記ここから---▽
    @user = Hash.new
    @user[:name] = params[:username]
    # 追記ここまで---△
  end
end

URLのパラメータはroutes.rbでシンボル名と遷移先を指定しておけば、
コントローラ側でparamsから値を取得できる。

DBからデータを取得

検索条件がある場合はfind_byを使ってデータ取得。
単純にIDのみの検索の場合はUser.find(1)でOK.

controller

# Userの中でusernameが"ryooopan"のデータ
@user = User.find_by(:username => 'ryooopan')

データの登録

登録画面の作成

new.html.erb

<%= form_for Tweet.new do |f| %> # Form開始タグ
 # f.タグ種類 : タグ名称
  <%= f.label :title %> 
  <%= f.text_field :title %>
  <%= f.label :content %>
  <%= f.text_area :content %>
  <%= f.submit %>
<% end %> # Form終了タグ

routes.rb
  get "tweets/index"
  get "tweets/show"
  get "tweets/new"
  post "tweets" => "tweets#create" # 追記

tweets_controller.rb

class TweetsController < ApplicationController
…
  def create
    # 保存処理
    @tweet = Tweet.new
    @tweet.title = params[:tweet][:title]
    @tweet.content = params[:tweet][:content]
    @tweet.save
    # 一覧画面に遷移
    redirect_to '/tweets/index'
  end

end

保存処理の書き方はdb/seed.rbと同じですね。

その他(個人的なメモ程度なものです)

リダイレクト

controller内の場合
redirect_to '/tweets/index'

レンダリング

controller内の場合(同一コントローラのindexを読む場合)
render :index
controller内の場合(テキスト表示をさせたい場合)
render :text => 'Hello!!'

view内の場合(読ませるファイルの名前の先頭にはアンダーバーを付けること)
<%= render xxx_form %>

Vagrantを使っている方へ注意点

 ホストPCとの共有フォルダ上で開発する場合、bundle installはインストール先を共有フォルダ外に指定する必要がある場合があります。
   通常のbundle installでgemのインストールがきちんとできない場合はbundle install --path /usr/local/src/hogeとすることをお勧めします。

25
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?