冬休みのこと5

今日も今日で引き続きやっていきます。

categoryのテストを作成

$ rails g rspec:model category
Running via Spring preloader in process 29032
create spec/models/category_spec.rb

バリデーションとかする

この辺はrecordと同様なので割愛。したいけど正直わからないことがあったので記載。
テストを書いていて、errorな値を書いていたんだけど、booleanが入ってくることを想定しているところに[nil, 1, “”]とかを用意してsaveした時にtrueかfalseかでテストを書いていた。実際テストを回してみると1とかがtrueになってしまい保存ができてしまう。これってどうしたら良いんだろう。

categoryをrecordにrelationする

category modelにbelongs_to, record modelにhas_oneを設定。
その後、DBのマイグレーションを行う

$ rails g migration ChangeColumnToRecord
Running via Spring preloader in process 60204
invoke active_record
create db/migrate/20160102045030_change_column_to_record.rb

あいかわらずリレーションに迷う

個人的には一つのレコードが一つのカテゴリーを持っているんだけど
rails的には一つのレコードは一つのカテゴリーに属すが、複数のレコードに属している。というほうが実装しやすい様子。
たしかにcategoryは複数のbelongs_toのidを持てないからなー。

fixturesファイルの作成

test/の下にあるfixtures ファイルを作成しようと思って作成したと頃うまく行かず。
しらべるとrspecからfixturesを見るパスが指定されているようでした。
そのファイルは spec/rails_helperに書いてあって “config.fixture_path” にpathが指定されていました。
なのでここをtest/fixturesに変えることで対応しました。

circle ci

circle ci がうまいこと動かない。
ひとつはrakeはrspecがはしるけれど rake test がなぜかminitestが走るのが謎なので調べている
http://qiita.com/tbpgr/items/5c2f192da0ccf8fad5e1

管理画面からtestのコマンドが打てるみたいだ。

あとはgithubとcircle ciの連携
https://circleci.com/docs/github-3rdparty-app-restrictions
Grant Access的なものをあげたらいい感じになったみたい。

deviseで、ログインしたユーザの情報を使用する

ログインユーザが作成したカテゴリー、レコードということをしらせるために
モデルに一緒に情報を保存する。
それをやる上でdeviseが用意してくれいてる current_user というヘルパーメソッドが使用できる。
ただしこれはviewでのヘルパーメソッドらしいので、modelとかで呼び出せない。
ココで少しハマった。

あとhidden_fieldでデフォルト値のvalueをいれようとしたら、railsdocでみつ方やり方ではできなくてハマった。

hidden_field :user_id, value: current_user.id

これでうまくいった。

deviseで非認証ユーザの制限

deviseのメソッドでbefore_actionを設定すると非認証ユーザの閲覧制限を行った。

before_action :authenticate_user!

給与の項目を scaffold する

年俸のレコードを作成

$ rails g scaffold salary year:integer money:integer user_id:integer

deviseのコントローラを独自実装してみる

難しそうだ。

$ rails g devise:controllers users
.
.
===============================================================================
Some setup you must do manually if you haven't yet:
Ensure you have overridden routes for generated controllers in your routes.rb.
For example:
Rails.application.routes.draw do
devise_for :users, controllers: {
sessions: 'users/sessions'
}
end
===============================================================================