前提
マンダラートのアプリを作っています。
マンダラートとはアイデア出しの手法の一つで
こんな感じで、連想してアイデアを出してくような感じ。
エラーが起きた
class MandalartsController < ApplicationController
def index
# 最初から配列の要素を9つ入れとく
# 配列の要素の中身があれば、何もしない
# 配列の要素の中身があれば、""の要素を入れとく
@mandalarts = Mandalart.all
binding.pry
if @mandalarts.count < $mandalart_blocks_num
($mandalart_blocks_num - @mandalarts.count).times do |mandalart|
mandalart = Mandalart.create(text: '')
@mandalarts << mandalart
end
end
end
NoMethodError: undefined method `<<' for #<Mandalart::ActiveRecord_Relation:0x000055f2bd5bb070>
といったエラーが起きた。
@mandalarts << mandalart
の部分でエラーが起きてる。
active_record
オブジェクト?に配列っぽく<<
で値を追加できないみたい。
app/controllers/mandalarts_controller
class MandalartsController < ApplicationController
def index
# 最初から配列の要素を9つ入れとく
# 配列の要素の中身があれば、何もしない
# 配列の要素の中身があれば、""の要素を入れとく
@mandalarts = Mandalart.all
if @mandalarts.count < $mandalart_blocks_num
($mandalart_blocks_num - @mandalarts.count).times do |mandalart|
Mandalart.create(text: '')
end
@mandalarts = Mandalart.all
end
end
とすることで、
配列の中身が$mandalart_blocks_num
分(9つ)足りなかったら、
足りない分、レコードを作成する。
そうして、 @mandalarts = Mandalart.all
とif
の中で定義することで
最初の@mandalarts = Mandalart.all
とバッティングしない。
spec/requests/mandalarts_spec.rb
it "works! (now write some real specs)" do
get root_path
expect(response).to have_http_status(200)
end
といったテストもパスできた。
レコードが$mandalart_blocks_num
分なかったら、$mandalart_blocks_num
分
レコードが作られるか確認できるテストも書きたいと思う。