1

オブジェクト:保存するActiveRecordの配列が、私は私のコントローラでActiveRecordをの配列を保存しようとしているが、このエラーが現れてさ

未定義のメソッド#<Array:...>

のために「保存」私は、モデルのこの方法があります:

def self.import(file) 
    reservations = [] 
    CSV.foreach(file, headers: true) do |row| 
    room_id = Classroom.where(code: row[0]).pluck(:id).first 
    row[0] = room_id 
    reservations << Reservation.new(number_of_guests: row[1], check_in_date: row[2], check_out_date: row[3], room_id: row[0]) 
    end 
    reservations 
end 

をそして私はこの次のコントローラがあります。

def create_import 
    @reservations = Reservation.import(params[:file].path) 
    respond_to do |format| 
    if @reservations.save 
     format.html { redirect_to @reservation, notice: 'Reservations was successfully created.' } 
     format.json { render :show, status: :created, location: @reservation } 
    else 
     format.html { render :import } 
     format.json { render json: @reservations.errors, status: :unprocessable_entity } 
    end 
    end 
end 

どうすればこの保存方法を行うことができますか?私は私の見解ではエラーのあるレポートを表示したい。

@reservations.each(&:save) 

、または複数insert機能を提供し、いくつかのサードパーティ製の宝石をインストールします。

+1

「Classroom.where(code:row [0])。pluck(:id)」は「Classroom.where(code:row [0])。pluck(:id).first'ですか。最初のものは配列にラップされた 'room_id'を与えます。 – br3nt

+1

@ br3ntええ、修正されました。ありがとうございます – gumaro

答えて

2

さて、あなたはそれらのそれぞれのsaveメソッドを呼び出す必要があります。上記の式は常にコレクション自体を返すので、trueと評価されるので、ifステートメントも書き直す必要があります。

+0

私はこの方法を使用する場合、どのように私のビューにすべてのエラーを返すことができますか? – gumaro

+0

@gumaro: 'each'の代わりに' reject'や 'select'を使って、失敗したインスタンスや成功したインスタンスを収集して保存することができます。 – potashin

+0

コードの表示方法を教えてください。 – gumaro

関連する問題