今日も今日で引き続きやっていきます。
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
===============================================================================