Ruby on Rails 初学メモ
dotinstall見ながら勉強中。
http://dotinstall.com/lessons/basic_rails_v2
あくまで自分用メモですので、これだけ見てもよくわからんと思います。
サイトで動画を御覧ください。
しかし、こんなレッスンが無料って素晴らしいですよね。
modelの作成
$ rails generate model Project title:string
規約
- モデル名は単数形。
- 頭文字は大文字。
省略できるオプション
- generateはgに省略できる。
- 属性のデフォルトはstringなので、省略できる。
$ rails g model Project title
モデルを作ったらmigrateでDBに反映させる。
$ rake db:migrate
コンソールからインスタンスを追加する
$ rails console $ p = Project.new(title:"prj1") $ p.save # new & save $ p = Project.create(title:"prj2") # コンソール終了 $ quit
使用中のDBにアクセス
$ rails db # そのままDBをいじれる $ .schema $ select * from projects; $ .exit
コントローラーの作成
$ rails g controller Projects
#規約
コントローラーの名前は、複数形にする。
ルーティングを設定
config/routes.rbファイルに以下を追加
resources :projects
routes コマンドで、ルーティングが表示される。
$ rake routes
このルーティングの表を元に、ビューやコントローラーの
構成を作っていく。
view を追加
controllers/projects_controller.rbに以下のメソッド追加。
def index @projects = Project.all end
規約に従って、viewの関数名と同じファイル名のhtml.erbファイルを新規作成する。
views/projects/index.html.erb
<!DOCTYPE html> <html> <head> <title>Taskapp</title> <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %> <%= javascript_include_tag "application", "data-turbolinks-track" => true %> <%= csrf_meta_tags %> </head> <body> <%= image_tag "logo.png" %> <%= yield %> <%= link_to "Back to HOME" "/" %> <%= link_to "HOME" projects_path %> </body> </html> <Task App>
<%= は、以下のプログラムを評価して表示する。 [prefix]_path で、それぞれのパスが代入される。
URLのルーティングを変更
ルート(domain.com/)をprojects#indexに設定
routes.rbに以下を追加
root 'projects#index'
共通テンプレートの編集
共通テンプレートはviews/layout/application.html.erb ファイル。
それぞれのモデルのページへリンクを貼る
index.html.erb
<ul> <% @projects.each do |project| %> <li><%= link_to project.title, project_path(project.id) %></li> <% end %> </ul>
link_to を使用。 project.title と一緒にリンク先 project_path(id名) を渡す。
id名はproject.id で取得可能。
それぞれのモデルのページをつくる
projects_controllerに #showを作成
def show @project = Project.find(params[:id]) end
モデル名.find( ID ) で、該当するIDのモデルインスタンスを取得。
paramsには渡されたパラメータが入っていて、
この中から :id を取得して findの引数に渡す。
ルーティングやパラメータ値はこの表を参考に。
モデルの追加ページをつくる
new にフォームを設置。
POSTで送ってcreateで受け取り、実際にモデルを作成する。
project_controller.rb
def new @project = Project.new end def create @project = Project.new(project_params) @project.save redirect_to projects_path end private # セキュリティ対策。projectとtitleだけ抽出する def project_params params[:project].permit(:title) end
フォームの書き方
new.html.erb
<h1>プロジェクトを追加する</h1> <%= form_for @project do |f| %> <p> <%= f.label :title %><br> <%= f.text_field :title %> </p> <p> <%= f.submit %> </p> <% end %> end
form_for @project do |f| を使う。
フォームのvalidationを設定
モデルに対して設定する。
models/concern/project.rb
validates :title, presence: true
presence: true で空の値を受け付けないようにする。
validateを通らなければ、新規追加画面に戻す
def create @project = Project.new(project_params) if @project.save redirect_to projects_path else render 'new' end
@project.save はvalidateが失敗すると、falseを返す。
validateが通らなかった際のエラーメッセージを出す
<%= form_for @project do |f| %> <p> <%= f.label :title %><br> <%= f.text_field :title %> <% if @project.errors.any? %> <hr> <%= @project.errors.inspect %> <hr> <%= @project.errors.messages[:title][0] %> <% end %> </p>
@project.errors.inspect で詳しい情報が見れる。
エラーメッセージの変更 & validate項目の追加
models/project.rb
class Project < ActiveRecord::Base validates :title, presence: {message:"値を入力して下さい。"}, length: {minimum:3, message:"短すぎます。"} end
長さなどの項目を追加していく。