■1つの配列を複数の引数として展開する
a = []
b = [2,3]
a.push(1) →[1]
a.push(b) →[1,[2,3]]
[1,2,3]にしたい場合には
a.push(*b) →[1,2,3] splat展開

■%記法で文字列の配列を簡潔に作る
%wで文字列の配列を作成する
%w! apple melon orange! → ["apple","melon","orange"]
%w(apple melon orange) → 上記同様


■メソッド
クラスメソッド:クラスに対して実行する
インスタンスメソッド:クラスから作成したオブジェクトに対して実行する

引数を渡すことで引数で指定した数値から開始することができる

with_index 添え字を取得する 繰り返しメソッド
fruits.map.with_index{fruit, i| "#{i}: #{fruit}"}

■繰り返し処理
Integerクラス timesメソッド,upto,downtoメソッド
5times.{} 5回繰り返す
10.upto(14) 10~14まで繰り返す
14.downto(10) 14~10まで繰り返す

Rubyではthrow,catchは例外処理ではなく
繰り返し処理を脱出するものとして用いる

■ハッシュ
同じ値を与えれば同じ値を返すような関数。
ハッシュ関数が返す値「ハッシュ値

配列と異なるのは、配列がインデックスを使って要素を区別しているが
ハッシュではキーと呼ばれるものを使用する。

よく使うメソッド
keys →ハッシュキーを配列として返す
values →ハッシュの値を配列として返す
has_key?/key?/include?/member? ハッシュの中に指定されたキーが存在するかどうか確認する

メソッドでは()を省略することができるが、
第一引数にハッシュの{}がくる場合には()を省略することができない

ハッシュリテラルがブロックと判断されてしまうため


■シンボル
'文字列'     :シンボル
文字列とは異なり、シンボルは整数
シンボルはイミュータブルなオブジェクトであり、破壊不可能
文字列はミュータブル、破壊可能

整数のため高速に値を比較できる、メモリの使用効率が良い

ハッシュのキーなどに用いることに向いている。

・%記法でシンボルやシンボルの配列を作成する
%s!ruby is fun! →:"ruby is fun"
%s(ruby is fun) →:"ruby is fun"

■よく使うイディオム
条件分岐内で直接変数に代入してしまう。
Rubyは変数への代入自体が戻り値を持つため文を分ける必要がない

limit ||=10
nil,falseの場合10を代入する

!!true →true
!!5    →true
!!false→false
!!nil  →false


6/20 プロを目指すRuby


・式展開 #{}を用いる場合自動的にto_sメソッドが呼び出される

丸め誤差
 0.1 * 3.0 #=> 0.3000000004
 コンピュータ内部で10進数ではなく2進数で計算しているため。
 大小を計算する際にバグにつながる可能性あり。

 Rationalクラスを使うと少数ではなく分数で計算結果が出
 そのため、バグが起きにくい
 0.1r * 3.0r #=> (3/10)

 変数に値が入っている場合にはrationalizeメソッドを呼ぶ
 a = 0.1
 b = 3.0
 a.rationalize * b.rationalize #=> (3/10)

Rubyではnilは偽となる

・後置if
 point *= 3 if day == 7

 もし7日であればポイント3倍みたいな

rubyではメソッドの戻り値を設定しない(することはできる)
return を使うときは途中でメソッドを抜けるときに使うことが多い

配列を連結して1つの文字列にする
[10.20.30].join => 102030

"Hi" * 10 => Hi!Hi!......

■数値クラスの継承関係

Numeric(数値)
       |
    ------------------------------------------------
    |        | |      |
Integer(整数) Float(少数)       Rational(有理数)   Complex(複素数)

■真偽値と評価を終了するタイミング
1 && 2 && 3 => 3 3までいかないと真偽が決められない
nil || false || 2 || 3 =>2 2の時点で真偽が確定


or and は優先順位が低く制御フローにて使われる

or 「Aが真か?、真でなければBせよ」

country or return "countryを入力してください"
# countryがnilまたはfalseの場合にはメッセージを返してメソッドを抜ける。

Rubyは、最後に評価された式がメソッドの戻り値になる

■条件演算子(参考演算子
式 ? 真だった場合 :偽だった場合

シンプルなif/else文の場合には条件演算子を利用した方がよい

■Predicate Methods / Bang Methods

?で終わるメソッド predicate methods 真偽値を返すことができる。
.empty? .odd? .even? .nil?
自身で作成したメソッドでも設定可能

■基礎知識

ガベージコレクションGC
 Ruby使用されなくなったオブジェクトを回収し、自動的にメモリを開放する

エイリアスメソッド
 .length .size など名前だけ異なるメソッド

■テスト自動化
・テスティングフレームワークに沿って、テストコードを書く
・テストコードを実行する
・実行結果の確認

■&とシンボルを用いて書く
.map{ |s| s.upcase}
→.map(%:upcase)

・条件はブロックの引数が1つだけ
・ブロックで呼び出すメソッドには引数がない
・ブロック引数に対して、メソッドを1回呼び出す以外の処理がな

■n以上m以下、n以上m未満の判定をする

・不等号を用いるよりも範囲オブジェクトを使うことでシンプルに記述できる
0度以上100以下
def liquid?(temperature)
0 <= temperature && temperature < 100

(0...100).include?(temperature)
end

・case 文と併用して用いる

case age
  when 0..5
  when 6..12

・値が連続する配列の作成をする
(1..5).to_a → [1,2,3,4,5]

■プログラムのインプットとアウトプットが明確である場合
TDD(テスト駆動開発)が向いている。
調べたら、コストかかるからどうなのって記事多いけど実際どうなんだ

■配列
rubyは添え字に負の数を用いることができる
a = [1,2,3] a[-1] → 3
first , last メソッド

6/19

Progate Ruby on Rails

 

空文字を禁止する場合には

validates : content, {presence:"true"}

validates:content,{length :{maximum:140}}

 

一括で設定する場合には

validates:content,{presence:"true",length:{maximum:140}

 

saveメソッドの返り値はtrue or false 

if 文を用いることで更新できなかった場合の分岐を作成可能

 

render メソッドを用いることで、他のアクションを利用せずに

ビューで取得した内容を表示できる

render("フォルダ名/ファイル名)

 

バリデーションに失敗すると、自動的にエラーメッセージを吐く仕様

そのため、エラーメッセージを表示させるためには、

本文中で、eachを用いて、エラー文を表示

post.errors.full_messages.each |message| do

 

たぶんeach文で取得するのは、エラーの数だけ配列で格納されている?ため多分

 

フラッシュを表示する機能がRailsにはある

コントローラにてアクションを設定

flash[:notice] = "表示したい文"

 

<% flash[:notice] %>

   <div class ="flash">

      <%= flash[:notice]%>

   </div>

<% end %>

 

 

6/18 学習内容

Progate Ruby on Rails

 

編集機能,idを探し文章を呼び出し、更新する

post = Post.find_by(id: params[:id])

post.content = ""

post.save

 

カラムを削除する

post = Post.find_by(id: params[:id])

post.destroy

 

どの編集ページを表示しているか判定するためにURLにidをいれる

get "posts/:id/edit" => posts#edit

 

フォームを送信する,送信先のURLを指定

form_tag("/posts/#{@post.id}/update")

 

textarea に属性を指定して、コントローラで取得し上書きする

<textarea name = "content"> ...

@post = Post.find_by(id: params [:id])

@post.content = params[:content]

@post.save

 

destroyアクションはgetではなくpost

データベースを変更しない get

データベースを変更するpost

 

postのルーティングのリンクににマッチするには

link_to("",URL,method:"post")

 

@post = Post.find_by(id: params[:id])

@post.destroy

 

6/17 学習内容

ProgateでRuby on Railsの復習

rails new app名 app名のアプリケーションフォルダが作られる。

rails server ブラウザに接続する際に必要なコマンド

 

コントローラ内のアクションはビューをviewフォルダから探し出し

ブラウザに表示する役割を持つ。

 

ルーティングはブラウザから要求したHTMLファイルのリクエストを

ルーティングで判断し、存在する場合にはリクエストを返す。

 

get "URL" => "コントローラー名#アクション名"

get "home/top" =>  "home#top"

 

rails generate controller home ...でアプリケーションを作成した際に

同時にcssのファイルも同時作成される。

 

css にてバックグラウンドの設定

background-image: url("/top.jpg");

 

htmlにて画像の表示

<img class="about-img" src="/tweets.png">

 

ocalhost:3000 (後ろに/○○がないURL)に設定する場合

ルーティングで get "/"とする

 

<a href= ""></a> ""の中身にはルーティングで設定しているURLと同じ値

 

マイグレーションファイルの作成 content がテキスト

rails g model post content:text

 

rails db:migrate コマンドを実行しないと反映されない

 

rails console →post = Post.new(content:"") →post.save

コンソールを開き、新規データを挿入してデータを保存

 

URLにIDを設定

ルーティングにて get "/:id"

 

リンク

link_to( 文章 , url  )