ある程度一通りの機能が作れたため,その他のモデルを追加していく.
$ bin/rails g model event name:string date:date sort_order:integer kurasu_id:integer
Running via Spring preloader in process 23848
invoke active_record
create db/migrate/20181213020027_create_events.rb
create app/models/event.rb
invoke rspec
create spec/models/event_spec.rb
invoke factory_bot
create spec/factories/events.rb
class CreateEvents < ActiveRecord::Migration[5.2]
def change
create_table :events do |t|
t.string :name, null: false
t.date :date, null: false
t.integer :sort_order, null: false
t.integer :kurasu_id, null: false
t.timestamps
end
add_index :events, %i[kurasu_id date sort_order], unique: true
end
end
bin/rails db:migrate
require 'rails_helper'
RSpec.describe Event, type: :model do
context 'common validation check' do
subject { event_factory :start2300_0406 }
it_behaves_like :presence_validates, %i[name kurasu_id date sort_order]
#it_behaves_like :unique_validates, %i[], -> { event_factory :other }
it_behaves_like :plural_unique_validates, %i[kurasu_id date sort_order], -> { event_factory :hr3300_0413 }
it_behaves_like :destroy_validates
#it_behaves_like :reject_destroy_validates
it_behaves_like :belongs_to, :event, has_many: %i[kurasu]
it_behaves_like :dependent_destroy, :event, %i[kurasu]
#it_behaves_like :reject_destroy_for_relations, :event, %i[has_many has_one]
#it_behaves_like :destroy_nullify_for_relations, :event, %i[has_many has_one]
end
context 'after some events are registrered' do
model_keys = %i[hr2300_0406 start2300_0406 hr3300_0413]
let!(:targets) { event_factories model_keys }
describe 'Event class' do
subject { Event }
it_behaves_like :mst_block, -> t do
{
order_date_desc_sort_order: [nil, t.values_at(2, 1, 0)],
}
end
#it_behaves_like :msta_block, -> t do
# {
# method1: [v1, a1, v2, a2, ...],
# method2: [v1, a1, v2, a2, ...],
# }
#end
#it_behaves_like :mst, :METHOD1, -> { [v1, event_factories(model_keys.values_at()), v2, event_factories(model_keys.values_at())] }
#it_behaves_like :msta, :METHOD1, -> { [v1, event_factories(model_keys.values_at()), v2, event_factories(model_keys.values_at())] }
end
context 'Event instances' do
subject { targets }
#it_behaves_like :amst_block, -> t do
# {
# method1: [v1, a1, v2, a2, ...],
# method2: [v1, a1, v2, a2, ...],
# }
#end
#
#it_behaves_like :amsta_block, -> t do
# {
# method1: [v1, a1, v2, a2, ...],
# method2: [v1, a1, v2, a2, ...],
# }
#end
#it_behaves_like :amst, :METHOD1, -> { [v1, a1, v2, a2] }
#it_behaves_like :amsta, :METHOD1, -> { [v1, a1, v2, a2] }
end
end
end
class Event < ApplicationRecord
validates :name, :kurasu_id, :date, :sort_order, presence: true
validates :sort_order, uniqueness: {scope: %i[kurasu_id date]}
# @return [Kurasu] 関連するクラス
belongs_to :kurasu
scope :order_date, -> { order arel_table[:date] }
scope :order_date_desc, -> { order(arel_table[:date].desc) }
scope :order_sort_order, -> { order arel_table[:sort_order] }
scope :order_date_desc_sort_order, -> { order_date_desc.order_sort_order }
end
class Kurasu < ApplicationRecord
(中略)
# @return [Array<Event>] 関連するイベント一覧
has_many :events, dependent: :destroy
長くなったので今日はここまで