なぜRailsのpartialではインスタンス変数を参照しない方がいいのか
『Ruby on Rails5 アプリケーションプログラミング』 読んだメモ
クエリメソッドはその場でDBにアクセスしない(遅延ロード)
- メソッドチェーン(連鎖して呼び出す)が可能
生成されたクエリはPumaのコンソールに吐き出される
whereメソッドを使うと、プレイスホルダー(任意のパラメータを引き渡せる)が使える
- 動きはfind_byと同じ
パラメータ数が少ない時は名前なしにする (params[:publish]))
- 多い時は名前付きにする (publish: params[:publish])
Active Decoratorメモ
読んだもの
qiita.com GitHub - amatsuda/active_decorator: ORM agnostic truly Object-Oriented view helper for Rails 3, 4 and 5
学んだこと
- テストのとき、ちょっと変わった書き方をする。
- →ActiveDecorator::Decorator.instance.decorate(model_instance)を呼び出す
モデルの例
module OrganizationDecorator def full_name "#{first_name} #{last_name}" end end
テストの例
describe '#full_name' do it 'returns the full organization name' do organization = Organization.new(first_name: 'John', last_name: 'Doe') decorated_organization = ActiveDecorator::Decorator.instance.decorate(organization) expect(decorated_organization.full_name).to eq('John Doe') end end
ADの機能は、Rails組み込みのものだと勘違いしていた。
「使えるRSpec入門・その1 」読んだメモ
読んだもの
学んだこと
原則として「1つの example につき1つのエクスペクテーション」で書く
- テストの保守性が良くなるため
letで宣言できる変数
**インスタンス変数の例** let(:user) { User.new(params) } # 同じ意味 user = User.new(params)
ローカル変数の例
let(:params) { { name: 'たろう' } } # 同じ意味 @params = { name: 'たろう' }
let は遅延評価される
- before + インスタンス変数は遅延評価されない
- 必要になる瞬間まで呼び出されないので効率がよい
it do ... endのことをexampleと呼ぶ
subject { user.greet } を宣言するときの決まり
- expect(user.greet).to eq 'hogehoge'が
- is_expected.to eq 'hodehode'という書き方になる
shared_examples 'foo' do ... end で再利用したいexampleを定義して、 it_behaves_like 'foo' で定義したexampleを呼び出せる
let の遅延評価によってテストが失敗する場合は、かわりに let! を使う
テストコードは「DRYさ」よりも「読みやすさ」を大事にする