#Rails:カラム名変更
タイピングミスによる、カラム変更が必要な事態になったため、
自分用メモとして記載します!
[公式ガイド]
migrationファイルの作成
$rails generate migration rename_neme_column_to_users
編集
class UserMigration < ActiveRecord::Migration[x.x] def change rename_column :users, :neme, :name # rename_column :テーブル名, :変更前カラム名, :変更後カラム名 end end
反映
rails db:migrate
自己学習の段階でリカバリー作業は積極的に実施していきます!
Ruby文法メモ
Ruby文法メモ
基礎文法ですが、自分用メモとして残しておきます。
users = [ { name: '太郎', age: 27 }, { name: '次郎', age: 25 } ] users.each do |user| puts user end # {:name=>"太郎", :age=>27} # {:name=>"次郎", :age=>25} users.each do |user| puts user[:name] end # 太郎 # 次郎 users.each do |user| puts "私の名前は#{user[:name]}です。#{user[:age]}です。" end # 私の名前は太郎です。27です。 # 私の名前は次郎です。25です。
characters = [ { name: '太郎', age: 27 }, { name: '次郎', age: 25 }, { name: 'xxx' } ] characters.each do |character| puts '--------------------' puts character puts "名前は#{character[:name]}です" if character[:age] puts "年齢は#{character[:age]}歳です" else puts '年齢は秘密です' end end # -------------------- # {:name=>"太郎", :age=>27} # 名前は太郎です # 年齢は27歳です # -------------------- # {:name=>"次郎", :age=>25} # 名前は次郎です # 年齢は25歳です # -------------------- # {:name=>"xxx"} # 名前はxxxです # 年齢は秘密です
# もし条件式がtrueなら処理Aを行う、そうでなければ処理Bを行う if 条件式 処理A # true else 処理B # false end # もし条件式1がtrueなら処理Aを行う、 # そうでなくもし条件式2がtrueであれば処理Bを行う、いずれでもなければ処理Cを行う if 条件式1 処理A # 条件式1:true elsif 条件式2 処理B # 条件式1:false # 条件式2:true else 処理C # false end if characters[0][:name] == '太郎' puts '名前は太郎です' elsif characters[0][:name] == '次郎' puts '名前は次郎です' else '不明' end # 名前は太郎です
# メソッド:複数の処理を1つにまとめたもの def メソッド名 処理 end def info puts '太郎です' end info def メソッド名(引数名) 処理 end def info(name) puts "#{name}です" end info('太郎') # 太郎です def info(name, age) puts "私の名前は#{name}で、年齢は#{age}です" end info('太郎', 27) # 私の名前は太郎で、年齢は27です
# 戻り値:呼び出し元に値を返す。 def メソッド名 return 値 end 変数名 = メソッド名 puts 変数名 def name return 値 end # 戻り値:呼び出し元に値を返す。 def メソッド名?(_引数名) return 値 end puts メソッド名?(_引数名) def メソッド(キーワード引数1:, キーワード引数2:) 処理 end メソッド(キーワード引数1: xxxx, キーワード引数2: yyyy)
Ruby on Rails学習記録2
モデル
アプリケーションが扱うデータや処理を表現する仕組み
モデルの作成
$rails g model モデル名 カラム名:データ型 $rails g model Post name:text # 規則:テーブルの作成には単数形、頭文字は大文字。
データベースに(変更を)反映する
$rails db:migrate # 反映されていない場合、マイグレーションエラーが発生する。
メソッド | 詳細 | 使用例 |
---|---|---|
all | 全てを取得 取得内容は、配列。 インデックス番号指定で取得可。 |
Post.all Post.all[0] |
new | インスタンスを作成 | Post.new(content:"xxxx") |
save | 作成したインスタンスをテーブルに保存 | post.save |
destroy | データを削除 | post.destroy |
モデル内のデータを編集(更新)する。
$rails console > post = Post.find_by(id:1) # Postモデルからid:1を取得する。 > post.content = "更新内容" # 既存contentの内容を上書きする。 > post.save # データベースへ保存する。 # update_atカラムの時刻が更新される。
【補足】データベース参照コマンド
$rails dbconsole
.table <- table_info
.header on <- header_info_on
共通のレイアウト:application.html.erb
ヘッダー、フッターなどをまとめると良い。
<%= yield %>に各HTMLファイルの内容が代入される。
link_toメソッド
タグを作成する。<%= %>で囲む必要あり。
第一引数に表示する文字を、第二引数に URLが代入される。
<%= link_to("ABOUT","/about") %> <a href="/about">ABOUT</a>
find_byメソッド
ある条件に合致するデータを取得する。
モデル名.find_by(カラム名: 値) Post.find_by(id:2)
変数params
- params[:○○]を使ったルーティングのURLから値を取得する。値はハッシュとして入る。
- name="○○"が付いたフォームの入力内容を受け取る
URL:xxxxx.posts/1 # routing get "posts/:id" => "posts#show" # controller def show @id = params[:id] <- {id:1} というハッシュが、変数paramsへ入る end # view <% @posts.each do |post| %> <%= link_to(post.content, "/posts/#{post.id}") %> <% end %>
form_tagメソッド
フォームに入力されたデータを指定されたURLに送信することが可能。
form_tag(送信先のURL) do
<input type="submit">
のボタンを押した時に、データが送信される。
name属性:html.erbタグにname属性を指定すると、入力データを送信することが可能。
name属性の値をキーとしたハッシュがRailsに送信される。
<%= form_tag("/posts/create") do %> <textarea name="content"></textarea> <input type="submit" value="投稿"> <% end %>
データを受け取る
name属性を指定したフォームに入力されたデータは、アクション内で受け取ることが可能。
フォームのデータは、変数paramsで受け取る。
paramsはname属性に設定した文字列をキーとしたハッシュになっている。
@post = Post.new(content: params[:content]) # Postモデルのcontentカラムへparams[:content]で受け取った内容をpost変数に代入する。 @post.save # 受け取った内容を保存する。 redirect_to("/posts/index") # 受け取った内容をposts/indexへ受け渡す。
orderメソッド
データを並び替える。
order(カラム名: 並び替えの順序)
順序:昇順(:asc)と降順(:desc)
@posts = Post.all.order(created_at: :desc)
Ruby on Rails学習記録1
アプリ作成
$rails new アプリ名
サーバー起動
$rails sever(省略可:s)
ルーティング・コントローラー・ビュー
内容 | 詳細 |
---|---|
routing | ブラウザ(URL)とコントローラを繋ぐ役割 |
controller | ビューをブラウザに返す |
view | ページの「見た目」を作るためのHTMLファイル |
コントローラー作成
$rails generate(省略可:g) controller コントローラ名 アクション名 # 同じ名前のコントローラがすでにある場合は、このコマンドを使うことはできない # rails g コマンドが反応しない場合 $spring stop
アクション:コントローラ内のメソッド
アクションはブラウザに返すビューをviewsフォルダの中から見つけ出す。
class HomeController < ApplicationController def top end end
each文:配列の中身を1つずつ取り出す
<% posts = [ "hello Ruby1", "hello Rails2" ] %> <%= posts.each do |post| %> <%= post %> <% end %>
アクションは変数指定可能。
@変数名でアクションで定義した変数をビューに表示可能。
※@はつけ忘れないようにする。
class PostsController < ApplicationController def index @posts = [ "hello Ruby", "hello Rails" ] end end # ビューの中身 <% @posts.each do |post| %> <%= post %> <% end %>
ルーティングの作成
get "URL" => "コントローラー名#アクション名" get "home/top" => "home#top" # ルーティングのURLは対応するアクションがあれば変更可能。 get "home/top" => "home#top" get "top" => "home#top" get "/" => "home#top" # ルーティングで設定したURLは、ビューファイルのリンク指定で利用可能 get "/" => "home#top" <a href="/">TOP</a> get "about" => "home#about" <a href="/about">ABOUT</a>
erbファイル:Embedded Ruby(埋め込みRuby)の略
内容 | 詳細 |
---|---|
<% %> | Rubyコードの記述可能。ビュー表示不可。 |
<%= %> | Rubyコードの記述可能。ビュー表示可。 |
<% post1 = "hello Ruby" %> <% post2 = "hello Rails" %> <%= post1 %> > hello Ruby <%= post2 %> > hello Rails
Rails:MVCの流れについて
本日は、Rails記事投稿の一部
を学習しました。
ポイント
- モデルの情報は、コントローラーのアクションへ@変数で代入する。 (ビューには直接書かない)
- params[:id]はURL側の数値を代入する。
- find_byはモデルから情報取得する。
- params+find_byの組み合わせでURLとモデルを紐付ける。
url:@@@xxxx/1 #route.rb get 'xxxx/:id' => 'zzz#yyy' # get 'xxxx/1' => 'zzz#yyy' # zzz_controller.rb def yyy params[:id] # {id:1}のハッシュが代入される end # yyy.html.erb <%= @id%> >1 # -------------------------------------------------- # zzz_controller.rb def yyy @post = Post.find_by(id: params[:id]) # params[:id]と一致するidデータをPostモデルから取得する。 end # yyy.html.erb <%= @post.content%> >hello Rails <%= @post.name%> >Ken # -------------------------------------------------- # zzz_controller.rb def aaa # Postモデルを全取得し、変数postsへ代入する。 @posts = Post.all end def yyy # params[:id]と一致するidデータをPostモデルから取得する。 @post = Post.find_by(id: params[:id]) end # zzz_controller.rb # 変数posts(=Post.all)の配列を変数postへ代入し、each文で一つずつ取り出す。 <% @posts.each do |post|%> # link_toでaタグ作成。 # 'post.content'の内容をビューへ表示。 # #{}で変数展開。postのidを取得してリンクとする。 <%= link_to(post.content,'posts/#{post.id}')%> <% end %> # route.rb # get 'xxxx/:id' => 'zzz#yyy' # zzz_controller.rb # => def yyy # @post = Post.find_by(id: params[:id]) # end # => yyy.html.erb # --------------------------------------------------
今回の学習で、MVC(モデル/ビュー/コントローラ)の流れを少しずつ理解できました。
今後も引き続き学習していきます。
最後まで読んでいただきありがとうございました。
学習時間目標 :1,000
本日の学習時間:3
目標時間まで :954
【お知らせ】ブログ更新について
タイトルにあるとおり、
ブログ更新についてのお知らせです。
本日より、ブログ更新頻度を1週間に1回とします。
理由は単純で、量が薄いので、
ここからは質(と言えるほどではないですが。)をあげるようなコンテンツとしたいと思います。
学習は毎日続けるため、
進捗はツイッターで発信します。
最後まで読んでいただきありがとうございます。
抑えておきたい。CSS用チートシート
本日は、cssのチートシートをまとめました。
今後も順次追加予定です。
CSSチートシート
css | 詳細 | 備考 |
---|---|---|
color | 文字色 | |
font-size | 文字の大きさ | |
font-weight | 文字の太さ | |
font-family | フォント種類 | |
letter-spacing | 文字間隔 | |
line-height | 行間隔 | |
background-color | 背景色 | |
border | 枠線 | 枠線の太さ、種類、色を指定可 |
border-radius | 角を丸くする | |
opacity | 要素を透過 | 0.0~1.0 |
rgba | 色を透過 | |
padding | 要素の余白(内側) | top,buttom,left,right |
margin | 要素の余白(外側) | top,buttom,left,right:auto+:margin:0 auto+widhtで中央配置可 |
width | 横幅 | px %(親要素に対する相対値) |
height | 高さ | px %(親要素に対する相対値) |
list-style | リストマーク | noneで黒点を消す |
float | 要素の並び | left(左横並び),right(右横並び),要素ごとにleft,rightを指定すると左右配置も可 |
position: absolute | 要素を重ねる | 基準:サイト全体の左上。top+leftで位置を指定。right+bottom併用可 |
position: relative | ーーー | position: absolute;の親要素へ指定することで、変更位置の基準とする。 |
text-align | 要素を寄せる | インライン要素やインラインブロック要素に対して、 left(左寄せ),right(右寄せ),center(中央寄せ)可。 divタグ(ブロック要素)内のインライン要素やインラインブロック要素は効果あり。 |
display: inline-block | block -> inline-block | |
background-image: url(画像のURL) | 背景画 | |
background-size | 背景画のサイズ指定 | cover(範囲を埋め尽くす) |
hover | カーソル変化 | |
transition | アニメーション | 変化要素と時間を指定する。hoverと合わせて使う。 |
最後まで読んでいただきありがとうございます。
詳細 | 進捗 |
---|---|
学習時間目標 | 1,000時間 |
本日の学習時間 | 4時間 |
目標時間まで | 982時間 |