LoginSignup
0
0

More than 1 year has passed since last update.

NoMethodError: undefined method `<<' for #<Mandalart::ActiveRecord_Relation:0x000055f2bd5bb070>

Last updated at Posted at 2021-12-04

前提

mandal-art-06.jpeg

マンダラートのアプリを作っています。
マンダラートとはアイデア出しの手法の一つで
こんな感じで、連想してアイデアを出してくような感じ。

エラーが起きた


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.allifの中で定義することで
最初の@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
レコードが作られるか確認できるテストも書きたいと思う。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0