概要
パラメータで受け取ったstring型の値をinteger型のカラムに変換してデータベースに保存したいですがどこでどのように値を変換すればいいかわからないです。
###ソースコード
new
1 <%= form_for @upload, :url => {:action => :create} do |f| %> 2 <%= f.label :file %> 3 <%= f.file_field :file %></br> 4 <%= f.select :lesson_id, @lessons.map {|l| l.id} %> 5 <%= f.label :レッスン番号 %><br /> 6 <%= f.select :genre, @genres.map {|g| [g.key, g.id.to_i]} %> 7 <%= f.label :割り当て %><br /> 8 <%= f.submit "Upload" %> 9 <% end %>
controller
1class UploadersController < ApplicationController 2 3 def index 4 end 5 6 def new 7 @upload = UploadFile.new 8 @lessons = Lesson.all 9 @genres = Genre.all 10 end 11 12 def create 13 @upload_file = UploadFile.new(file: file_params[:file], lesson_id: file_params[:lesson_id], genre: file_params[:genre]) 14 if @upload_file.save 15 redirect_to teacher_uploaders_path, notice: "送信に成功" 16 else 17 flash.now[:error] = '送信に失敗しました' 18 render :new 19 end 20 end 21 22 23 private 24 25 def file_params 26 params.require(:upload_file).permit(:file, :lesson_id, :genre) 27 end 28end 29
起こるエラー
ActiveRecord::AssociationTypeMismatch in TeachersUploadersController#create Genre(#70072727747660) expected, got "1" which is an instance of String(#15875560)
試したこと
コントローラのcreateアクションでfile_paramsでto_iメソッドを使って変換
def create @upload_file = UploadFile.new(file: file_params[:file], lesson_id: file_params[:lesson_id], genre: file_params[:genre].to_i) if @upload_file.save redirect_to teacher_uploaders_path, notice: "送信に成功" else flash.now[:error] = '送信に失敗しました' render :new end end
エラーが出た
ActiveRecord::AssociationTypeMismatch in UploadersController#create Genre(#39949360) expected, got 1 which is an instance of Integer(#15858780)
genreの値が"1"から1に変わっているのでto_iメソッドはちゃんと動いているのに先ほどど同じエラーが出たのは何故ですかね?
1は整数型ではないのかと疑問。
どなたかご教示いただけると幸いです。
バージョン
ruby 2.6.0
Rails 5.2.2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。