ぱーりー on rails

たまごにひびすらわれてない

今の自分にたりないもの


自分のダメなところと
メンターの方から頂いたアドバイス。



①人に説明するのが下手くそ。

▶︎ロジカルシンキングの本をよむ。

まず主題を伝える。

いつもエラーがおきてわけわからんくなって
気持ちが焦ってエラーが起こってる部分のみを
あせってはなして「?」みたいな反応をされることが多い。

もっとふかぼってかんんがえていく。
rails ももっとふかぼってなんでここにこれをかくのか、
それはなんでかを考える力にもつながると思った。
コードの思考力を高める。



②実装するISSUEがあってそれを明らかなもの以外はどこになにを書いたらいいかがまずわからない。

▶︎MVCを理解する。
これでもっとrails を知るべき。


③プロジェクトの中でなにがどうつながってるのかがわからなくなる。

▶︎図をかけるようになる。(UML
他の社員さんの机をみたらみなさんノートがあってなんかよくわからない図を書いている。


railsの全体的な理解がない。

▶︎人に教えれるようになる。
わからなかった過去の自分に向けて説明してみる。
いい人がいたらその人に聞いてもらう。




もう本当にこんなポンコツのわたしにこんなに素晴らしいアドバイスしていただいて
感謝しかないです。。。
GW明けに今までの実装を説明できるようにするとのことで
まじかよやっべ。ってなりましたが
こんなわたしのためにお忙しい中お時間あたえてくださってることに本当に感謝。
今週もがんばるぞおおおおおお

SQL *ビューの作成

ビューをつくるメリット
あるテーブルからデータを取り出すのによく使う
SELECT文があったとすると、毎回同じ記述をするのは面倒ですよね。

そのときはそのSELECT文を使ってあらかじめビューを作成しておくことができます。


そんなビューを作成する方法です。

ビューを作成する

一つのテーブルから作成する

一つのテーブルから必要な部分だけを取り出してビューをつくるには次のように記述します。

CREATE VIEW ビュー名 AS SELECT 取り出す列名, 取り出す列名 FROM テーブル名 WHERE 条件式

CREATE VIEW view_aaa AS SELECT sei, mei FROM tbl_meibo WHERE team = 'A'



複数のテーブルから作成する

複数のテーブルからそれぞれ必要な部分を取り出し、それらを組み合わせてビューをつくる。

CREATE VIEW ビュー名 AS SELECT 取り出す列名, 取り出す列名 FROM テーブル名, テーブル名 WHERE 条件式

CREATE VIEW view_aaa AS SELECT sei, mei FROM tbl_meibo, tbl_nenrei WHERE tbl_meibo.no = tbl_nenrei.no


ビューを利用する

登録(INSERT INFO ~)、更新(UPDATE ... SET) 、削除( DELETE)はテーブルと同じ方法でできます。
ただし、
データの変更は一つのテーブルから作成されたビューに対してのみ行える。
GROUP BY句、 HAVING句、DISTINCT句を使ってつくられたビューは、
グループ化されたことで行の特定ができないため、データの変更ができない。



こんなかんじです〜〜〜

SQL *結合について

交差結合

複数のテーブルまたはビューにあるすべての行を単純に結合する方法。
ex)
SELECT * FROM 結合するテーブル名または列名 CROSS JOIN 結合するテーブル名または列名

SELECT * FROM テーブル名, テーブル名
としても交差結合と同じ結果が得られる。


内部結合
交差結合の結果から、
指定した列の値が一致するデータのみを取り出す方法。

ex)
SELECT * FROM 結合するテーブル名 INNER JOIN 結合するテーブル名 ON 一致の条件となる列名 = 一致の条件となる列名

SELECT * FROM tbl_aaa INNER JOIN tbl_bbb ON id = no;

これはWHERE句を使って記述することもできる。

SELECT * FROM tbl_aaa , tbl_bbb WHERE tbl_aaa.id = tbl_bbb.no;

このとき

一致するidとnoがない場合はそれは表示されない。


外部結合
内部結合した結果に加えて一致する値がなかったデータも取り出すことができる。
外部結合には、左外部結合右外部結合全外部結合の三種類があります。


左外部結合
左側のテーブルを基準に結合する。
右側のテーブルに一致する値がなくても左側のテーブルのデータはすべて取り出される。


ex)
SELECT * FROM tbl_aaa LEFT JOIN tbl_bbb ON id = no;


右外部結合
これは左外部結合の右バージョンです。

全外部結合
右テーブル側のデータはすべてとる、右テーブル側だけのデータはすべてとるときたら最後は
両方とる働きをするのがこの結合です。


WHERE句での外部結合
SQL serverの場合)
「=」演算子の左に「*」をつけるとLEFT JOIN,右だと RIGHT JOINと同じ働きをする。

ex)
SELECT * FROM tbl_aaa, tbl_bbb WHERE id *= no;
この場合左外部結合と同じ働きをする。

SQL *基本的な関数

アルゴリズムを考えるのになにからしたらいいのかと
社員さんに相談したらSQL理解できてる?
ってきかれて
「」
ってなったので
そろそろSQLをちょっとかじってみようとおもって
関数をまとめてみました。

SELECTぐらいしか知りませんでしたが
やっぱこの辺理解するだけで
データベースに対する理解が深まったりテーブル結合のこととか
データの取り出しかたがパッと頭に浮かぶようになってきます。


基本的な関数の簡単な非常にざっくりなかんじで説明をします!


CREATE
作る

ex)
CREATE TABLE テーブル名 (列名, 型)
CREATE TABLE tbl_game ( name VARCHAR(20), score INT)

INSERT INFO
データを登録する
ex)
insert into テーブル名 (列名) values (データ名)
insert into tbl_datelist (no, datel, date2) values (1, '2004-04-03', '2004-07-03');


SELECT
取り出す
ex)
SELECT * FROM テーブル名
これでこのテーブルを取り出してくる。


WHERE
条件にあったデータを取り出す。
ex)
where category_id = ‘1’


ORDER BY
順番にならべる。


GROUP BY
データをグループ化する。
ex)
SELECT price COUNT(列名) FROM テーブル名 GROUP BY 列名


COUNT関数
集約関数のうつのひとつ。()内に指定した列に存在する行数を返す。


AS演算子
既存の列に別の名前をつけて表示しりことができる。一時的に変更できるだけで元の列名が書きかわるわけではない。


DISTINCT句
重複したデータを取り除いて表示することができる。
ex) SELECT DISTINCT 列名 FROM テーブル名
これだと列名が重複しているもののうちのひとつを残して重複している分を除去する。

*数値関数

CEILING関数、SEIL関数
引数以上で最も小さい整数値を返す。
CEILING(55.44) これなら、56を返す。



FLOOR関数
引数以下で最も大きい整数値を返す。
FLOOR(2.58) これなら、2を返す。


RAND関数
0以上1.0未満の範囲内で乱数を取得する。
データを無作為に取り出したいときい有効。


*文字列関数


LEN関数、LENGTH関数
文字列の文字数を返す。


SUBSTRING関数、SUBSTR関数
文字列から指定された部分だけを取り出して返す。
SUBSTRING('リンゴジュース', 3, 2)  => ゴジ
リンゴジュース:取り出す元の文字列または文字列型の列名
3:文字列の先頭(左端)から数えて何文字目から取り出すかを指定。
2:何文字取り出すか。


UPPER関数
文字列を大文字にする。


LOWER関数
文字列を小文字にする。


*日付関数


GETDATE関数(SQLserver)、SYSDATE関数(Oracle,MySQL)
ex) GETDATE () => 2016-04-22-12:30(現時間)
引数は指定しない。


このほかにも日付データから年、月、日を取得する関数(DAY,MONTH,YEAR)
日数、時間数を加算する関数(DATEADD)
日付の差を取得する関数(DATEDIFF)
がある。


*集約関数

AVG関数
列に含まれるすべての値(null除く)の平均値を求める。


SUM関数
列に含まれるすべての値(null除く)の合計を求める。


COUNT関数
列の数を求める。


*変換関数


CAST関数
データ型の変換
CAST(0.245 AS VARCHAR)



演算子


IN演算子
( )内に指定した値と一致したデータをとりだすことができる

NOT IN演算子
指定した値以外の物を取り出すことができる


*サブクエリ
SELECT文は抽出条件としてSELECT文をつかうことができる。
サブクエリを使うことでより複雑な条件付けをしてデータを取り出すことができる。


参考にした本はこちらです。
すごくわかりやすいです!!!!

読んでいただいてありがとうございました。
関数、随時追加していこうとおもいます。
それかまた別項目でSQLについて新しく書こう思ってます。

www.amazon.co.jp

ransackで検索機能

ransackで検索機能を作成しています!

あたらしい機能つけたりするときは
ネットで検索するのもいいですが
まずはgithubソースコード見たほうが良いよといわれたので
早速githubみながらやったら
わかりやすすぎて!!!!!

github.com

これです♡



で、今回検索機能をつけるにあったて
検索対象の書き方について
ピンと来るまで時間かかって
検索対象の書き方を詳しく書いてるブログとかあんまなかったから
かこうとおもいます。
ちゃんと探したらあるかもですが( ´Д`)y━・~~




♫検索対象のかきかた

:属性_predicate
のような書き方をします。

そのpredicateについての紹介が今回のメイン!



  • cont
Project.search(:name_cont => 'hoge').result


これはprojectモデルの属性の中の「name」を含む(cont)もの(:name_cont)を結果として表示させる。
例えばこの場合だったらProjectのnameが

hoge
hogehoge
hoge1

などがあったとしたら、結果として表示されます。



  • eq

:name_eqとすることでその属性(今回ならname)と等しいものが結果として表示される。

Project.search(:name_eq => 'hoge').result

この場合だと

hoge

のみが検索結果に表示されます。

  • lt

その属性以下のものを結果として表示

project.search(:price_lt => 1000).result

priceが1000以下のものを表示。


  • gt

その属性以上のものを結果として表示

project.search(:price_gt => 1000).result

priceが1000以上のものを表示。


ほかのはここにもわかりやすくのってます!
(途中放棄)

github.com




きのうスタバのメロンたべておいしすぎたから
あと一回はたべたい♡

リーダブルコード1章

理解しやすいコード

 

 

命名力をつけるには

まだ実際に自分でクラス名を考えたりしたことはないので

難しく感じたのですが。

 

p17らへんを読んでふと思ったこと。

普段作業していて本当によくエラー画面に遭遇します。

 

そのときエラー文って本当に端的に

「どこ(ファイル)のどの部分(具体的なコード部分)がまちがってるから

エラーでてんるんっすけど。」

みたいにツンデレな感じで教えてくれます。

エラーを教えてくれます。

 

なのでこのエラー文の書き方もすごく参考になるなと思いました。

 

 

 いままで練習でつくったあぷりで振り返ってみよとおもいます。

あと英語力クソすぎるのも問題。

 

 

rspecエラー

$rspec

でcircleciのbuildテストをするときのエラー。

 

 

f:id:mainsytain:20160418111507p:plain

failuresのひとつめ!

 

46行目

 

解決方法。

Project.lastとしていたことで

無理やり最後のデータをとりだそうとして取り出せないし、

いろいろdatabase.ymlとかいじってめちゃくちゃにしてたら

データベースのデータ全消ししてしまうってことが起こったので

そのせいなのか?

よくわかんないけど

projectのデータは入れても変わらず同じエラーがでてた

 

 

lastをとったらいけたからまいっか

なんでかわかんないのが気になるけど

これからもspec勉強して触っていく中で

理由わかる日が来るとおもってもう放置!

二つめも同じようにlastとったらいけました。

 

デフォルトではいってたやつなのにこんなエラーでてるのは

自分がなんかやらかしたとしか考えられないので

多分マージしたときにコンフリクト起こるんだろけど

そんときはそんときで

また学べばい!!!w 

 

あと次からブログにコードはるのもっときれいにします。

エラー文もスクショってゆう雑さw 

 

specらへん最初は、は?!いる?!

って思ってましたがたのしくなってきた♡