Head First Rails(2)

フォームからデータを受け取ってコントローラで保存するところで詰まりました。


def create

@ad = Ad.new(params[:ad]) 

@ad.save

end


とすると

ActiveModel::ForbiddenAttributesError

だそうです。

ちょっと調べるとこんな記事が。

なるほど、このままでは書き込み不可だと。

で、記事を参考に書き直しました。

 


def create

attr = params.require(:ad).permit()

@ad = Ad.new(attr)

@ad.save

end


 

ここも参考にしました。

デフォルトではアクセスparamsの中身はアクセスが許されていないらしいです。

Head First Rails(1)

最近よりrailsをより深く理解するためにHead First Rails(HFR)を読み始めました。

かなり丁寧にrailsを解説してあっていい感じです。

ただ、読んでいて分かったのですが、これrailsのバージョンが古いです。

rails2.3でした。(英語版だとそんな事無いのかも)

 

ありゃ〜、これは使えないかも。。。、と思っていたのですが

railstutorialをやっていたおかげで、脳内でrails3と4に変換しながら読み進める事が出来ました。

そのおかげで、調べものしたり、実験したりで結構楽しく読み進める事が出来ます。

案外自分で色々確認する癖が付いてこちらのほうが良いかもしれません。

基本的なところは変わっていないのでrailsを深く理解したい方にはおすすめだと思います。

また、手を動かしながら覚える系なので、既にアプリを二つ作る事も出来ました。

具体的な例からが一番学べる気がするのでとても良いと思います。

 

移植(5)

内容

今日はあまり時間がなかったので、プロダクトのコードを奇麗にする事だけしました。

 

まずrailsのviewの中がごちゃごちゃしていたので、それをcontrollerの中に移しました。

controllerの中で計算した値はインスタンス変数でviewに渡してやる事が出来るので、それを利用しました。

 

次にjavascriptの変数名や関数名がおかしかったので、それを修正。

文が長ったらしい所もあったので、変数を一つ新たに作って短くしました。

assetsの中に入れてしまいたかったのですが、javascript内でrubyの変数を使っていたので断念。

 

最後にコメントが無かったので、分かりやすいようにコメントを付記しました。

 

動作の確認をして無事動いたのでよかったです。

 

感想

一区切りがつきました。

インターンの期間ももうあまり無いので、まとまったものを作る事が出来てよかったです。

移植(4)

内容

ハッカソンのプロトタイプをrailsに移植しました。

タイマーの実装にajaxを使う予定でしたが、DOMでも出来そうだったので試してみました。

すると、DOMとjavascriptのsetIntervalメソッドを使って実装できました!

DOMで動的にhtmlタグの中身を書き換えるだけでタイマーが作れてしまいました。

 

そのあと、見た目を整えるためにCSSでタイマーの位置を調整しました。

CSSすごいですね。

場所を指定するだけで簡単に画面の見た目を変更する事が出来ます。

 

最後にルーティングが汚くなっていたので、railstutorialを参考にして書き換えを行いました。

 

感想

自分で勉強した事を使ってなんとか形にする事が出来ました。

勉強した事がきちんと活かせるって、本当に良いですね。

おかげで、今日はとってもハッピーです。

明日はコードがごちゃごちゃなっているので、その辺りを奇麗にしたいと思います。

移植(3)

内容

今日はタイマーを作るためにJavaScriptのお勉強をしました。

テキストには「JavaScriptの絵本」を使いました。

その中でタイマーに使えそうだと思ったのはDOMです。

idをhtmlタグの中に埋め込んでおけば動的に表示する文字を変更する事が出来ます。

functionで関数を作っておいて、それを使って文字を書き換えてやればタイマーが作れそうです。

ajaxまでやりたかったのですが、ちょっと内容が多かったです。

明日その辺りをやろうと思います。

 

感想

一冊を一日でやると結構疲れました。

しかし、JavaScriptでページを使って行く概観が得られてよかったです。

railsJavaScriptの中に埋め込めるみたいで、結構色々で来そうです。

移植(2)

内容

railtutorialに慣ってgithubとherokuに少しずつ昨日を付け足しながら、アップロードして行っているのですが、herokuで問題が起きました。

タスクを設定するページが表示できません。

何でかなとherokuのログを見てみても青文字でエラーは出てないっぽい。

うーん、ローカルではうまく動いているのに。。。

herokuと違うのはデータベースの種類だったなと思い出して、もう一度ログを見てみると青文字なのにエラー出てました。

なるほど。

もしかしたらmigrationファイルを更新した後、更新していなかったかも。

でherokuさんにmigrationをresetして更新してもらったところ、うまく行きました。

 

その後、今度は保存したデータを取り出しにかかりました。

コントローラでデータをインスタンス変数に入れた後、ビューで受け取ります。

とりあえず全てのデータを取ってきて最新のデータをビューで取り出しました。

 

次にjavascriptでデータからタイマーを作成しようとすると、タイマーの値だけが出力されてしまう事態に。

困りました。

ちょっとjavascriptのお勉強が必要みたいなので、明日やってからタイマーの実装にかかります。

 

感想

すこーしずつ進んでいます。

javascriptはここ数週間使っていなかったので復習が必要みたいです。

ちょっと勉強し直してきます。

移植(1)

内容

今日は先日ハッカソンで作成したタスク達成アプリのenchant.jsからrailsへの移植を始めました。

 

まず、ページを作成するところから始めました。

railsのgenerateコマンドを使って必要なページを作成して行きます。

途中でタスクの設定ページが無い事に気づいてコマンドを使わずに手で入れました。

 

次に各ページに画像を設定して行きました。

assets/imageの中に画像ファイルを置いてやればviewから、ファイル名を指定するだけでアクセスできます。

 

その後、画像クリックでページを遷移出来るようにしました。

link_toにimage_tagをネストしてやるだけで出来ました。

 

次にタスクを設定する画面で実際にタスクを設定できるようにフォームを実装してきました。ここで結構手間取ってしまいました。

まず、モデルをrailsコマンドで作成し、そのオブジェクトに対してフォームから値を入れて行きました。

問題は値を取り出して、jsに渡している方法がまだ分からない事です。

今日はここまでにして、明日に託す事にします。

 

感想

gitでブランチをやりたい事を名前にして切って、実装できたらコミットしてマージするという作業を繰り返しました。

こうすると自分のやりたい事と実際の作業が一致してとても見通しが良いなと感じました。

途中でトラブルがあった場合もすぐに前のバージョンに戻って行けます。