4-2. PUTでitemの情報を更新 / 4-3.DELETEでitemを削除

1.未経験が3ヶ月でエンジニアになるために何をする

の課題2,3を実施します。

 

似てるので一緒に。

いくつかハマった部分のみメモ。そろそろcontrollerのみにします。

 

2.PUTitemの情報を更新

def update_item

@project = Project.find(params[:id])
@project.title = params[:title]
@project.save
render json: @project
end

ハマったのは

・titleの上書きがわからなかったこと
・そもそもPUTメソッドがわからなかったこと
・データを返したもののsaveし忘れたこと

ここらへんでした

ちなみにconfig/locales/route.rb

 put 'projects/update/:id/:title' => 'projects#update_item'

 

3.DELETEitemを削除

同じくidから拾ってきて、けして、消したよって表示にしました

def destroy_item
@project.destroy
render text: "Delete!"
end

 

同じくroutesは下記

delete 'projects/delete/:id' => 'projects#destroy_item'

 

rake routesをすると

f:id:asaharada:20170729142641p:plain

こんな感じです。

 以上

4-1.POSTでitemを新規作成

1.未経験が3ヶ月でエンジニアになるために何をする

この記事の課題1を実施します。

routeでpostメソッドで、
Projectsコントローラーのcreate_itemメソッドを
呼び出すように指定する
この時URLから:titleを変数として受け取る

 

【routes.rb】

post 'projects/post/:title' => 'projects#create_item

 

【projects_controller.rb】

def create_item
@project = Project.new
@project.title = params[:title]
@project.save
render json : @project
end

 

新規projectを作成、titleにroutesで受け取った:titleを
projectのtitleに格納→保存
render jsonで@projectmを表示して完了。

 

と思いきや

URLからPOSTをしてみたものの
Rails4
以降の規約か何かでPOSTを一部禁止している?らしいです
受け取ることができなかったので調べた結果

protect_from_forgery with: :exception
これを元々のcontrollerにツッコんどけば
POSTを受け取ってくれました

以上です。

4-0.GETメソッドでURL指定したitemデータをJSONで返す

dotinstallでアプリが完成したので、ようやく3のWebAPI拡張の課題に入ります。

1.未経験が3ヶ月でエンジニアになるために何をする

この記事の課題0を実施します。

 

>0.GETメソッドでURL指定したitemデータをJSONで返す

 

routesでidをURLから取得して、コントローラに渡す
→DBから指定idのアイテムを取得して、JSONデータで返す

 

【routes.rb】

get 'projects/get_item/:id' => 'projects#get_item

 
【projects_controller.rb】

def get_item
@project = Project.find(params[:id])
render json: @project
end

 

rake routesするとこんな感じ

https://teratail.storage.googleapis.com/uploads/contributed_images/e47f7e1ecde8d39a16c1d294c4f50a83.png

  f:id:asaharada:20170722222728p:plain

 

実はprivateメソッド下に入れてしまっていて

何回もアクションが見つかりませんと怒られました。

 

以上

3.dotinstallのタスク管理アプリを作る

http://dotinstall.com/lessons/basic_rails_v2

 

dotinstallでタスク管理アプリを作りました。

ちなみにユーザーが何か作る時は

rootディレクトリではなく
一般的にhomeディレクトリの下で作るそうです。

Cyberduckなどでダウンロードは出来ても
アップロードが出来ずにハマるので注意です。

あとはdotinstall先生をみて頑張って作るのみです。

 

dotinstallを見てもよくわからない場合
(私はよくわからないまま写経していました)

これもメンターオススメの本ですが

圧倒的にわかりやすかったです。
私は4系なので4のを買いましたが
5が最新なので注意。

www.amazon.co.jp

 

以上です。

 

 

2-1.さくらのVPS(CentOS7)+Railsの環境を構築する

今回は、下記環境を設定しました。
※ちなみにdotinstallはCentOS6なので若干コマンド違いました。
※近くに有識者がいる人であれば、AWSでいいと思います。1年間無料。

 

【メイン】
Mac OS X
さくらのVPS + CentOS7
(さくらのVPSなら初期費用2000円、月1000円くらいです)
Ruby 2.3.1
Ruby on Rails 4.2.1
Git 

 

【おまけ】
CyberDuck
sublime text3
Postman
Pry 

 

順番あまり覚えていないので、
ざっくりメモしておきます。

 

あまりに初心者で
さくらインターネットの画面がよくわからなかったのですが
ログイン→契約情報→契約サービスの設定→サーバー設定
でコントロールパネルにいけます。

 

まずはサーバを起動し、OSをインストールします。
右上の各種設定→OSインストール→カスタムOSインストー

→CentOS7を選択すれば、CentOS7がインストールできます。

 

OSをインストールした後、自分のPCのコンソールで
このサーバをいじれるようにします。

rootでログイン。IPアドレスが必要です。

ssh root@111.11.111.11(メールに記載のアドレスで)

yes/noと聞かれるのでyesと答え、メールに記載されているパスワードを入力します。

 

次はおきまりらしいのでこれを打ちます。

yum update 

ユーザーを追加します。ユーザー名は自分で決めて大丈夫です。

useradd ユーザー名(ローマ字)

パスワード設定します。

passwd ユーザー名

任意のパスワード入力ください。セキュリティ上緩ければエラー出ます。

usermod -G wheel ユーザー名

これで権限が普通のユーザーでも付与されます。

 

 長くなって来たので続きはまた今度。

 

■OSを再インストールしたときにログイン出来ない


さくらのVPSは便利なOSの再インストール機能があるのですが、

そのままログインしようとするとこのように怒られます。

@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:w4x+ws3hHVyDCfKnkodTxM14W4/TMCgNuGOWx8C/PeM.
Please contact your system administrator.

 

情報を消す必要があるので、

$ ssh-keygen -R 100.100.100.100

入力後ログインします

$ ssh@100.100.100.100

パスワードを入力すればログインできました。
SAKURA Internet [Virtual Private Server SERVICE]

1.未経験が3ヶ月でエンジニアになるために何をする

未経験からエンジニアになるにはいくつか手段があると思っています。

幸い私は間違った時に軌道修正してくださるメンターがいてくださったので

自己学習を選択できました。今回は自己学習を前提として、流れを記載します。

 

6月中旬からスタートしまして、今3の途中です。

復習と私のように未経験からエンジニアを目指したい人向けで

メモを残しておきます。

 

1.環境の構築(1週間)

クラウド借りて、サーバ立てて、何か作れる環境を作る。

ここは止まらないために、どのサイトもしくは本の何を作るか、それは

どんな環境で作られるかを見た後に全く同じ環境を立てることをオススメします。

未経験の私はバージョンが違うだけで1時間以上止まりました。(主にコマンド検索)

 

2.dotinstallなどで何か作る(今回はタスク管理アプリ)

なんでもいいから比較的止まらず作れるものを作る。

メンターの方に言われたのが、スピード重視ならとりあえず難しいとかじゃなくて

止まらなくていい作り方をするように言われました。

Udemyやdotinstallで何か作ると比較的止まらず進みました。

今回はdotinstall先生にお世話になりました。

 

3.作ったものの復習も兼ねて作ったものを進化する

とりあえずdotinstallが終わった段階でもう一個何か作ろうかと思っていたら

メンターの方が課題をくださりました。

APIの拡張】
0.GETメソッドでURL指定したitemデータをJSONで返す
1.POSTでitemを新規作成
2.PUTでitemの情報を更新
3.DELETEでitemを削除
4.itemをidではなく名前やpriceなどで検索できるAPI作成
5.itemにカテゴリをつける(Association)
6.カテゴリにひもづくitemsを取得するAPI作成(GET)
7.itemをカテゴリに紐づかせて新規作成するAPI(POST)
8.itemのカテゴリだけを変更するAPI(PUT)


【認証機能】
1.認証機能(新規登録・ログイン)を作ってみる
->Deviseってgem使ってもいいですし、自作してみるのもありかなと思います
2.作った認証機能を元に各ユーザーにトークンを付与する
3.正規のトークンを持っている人だけ上記で作ったAPIを利用できるようにする

 

JavaScript側を作ってみる】
1.JavaScriptAjaxを使って、上記で作ったAPIを利用してみる
2.帰ってきたJsonを元にJavaScriptでHTMLを作成し表示させる


【画像】
1.(html)itemを画像と一緒に投稿できるようにする
2.APIでitemを写真と一緒に投稿できるようにする

 こんな課題をいただきました。このブログの主要メモはここになりそう。

動画サイトとか本だと比較的答えが記載されていて

自分で考える時間がかなり少なくなってしまうので 

1行の課題に対して自分で考えて、調べて、動かしてみて、エラー探して、ちゃんと動くまでやってみる

というのはすごく勉強になりました。まだ途中です。

4.実務経験に近い経験を積む

まだ途中ですが、web系の業界に行きたい場合は確実に実務経験が必要だと判断しました。

インターンやアルバイト

・未経験採用の会社に転職

・自社でエンジニアになる

 

割とハードルは高いものの一番経歴上良いのは3番目です。

環境という運が割と必要だと思います。あと意欲。

4を実現するために、実務に役に立つ可能性がある(会社が自分の非エンジニアの人時をエンジニアに回してでも作った方が良いと思える)システムに

近いものを作ろうと考えています。

 

長くなってしまいましたが以上流れでした。