私は現在これにかなり困惑しています。最近、Railsアプリケーションを更新する必要がありましたが、Visitorオブジェクトも保存しようとするオブジェクトを保存しようとすると、このエラーポップアップが表示されます。失敗しているコードは次のとおりです。
if @sale.shift_id.nil?
@sale.update_attribute(:shift_id,session[:shift_id])
@title = "New Sale"
@sale = Sale.new
@products = Product.order("name")
@shifts = Shift.order("starttime")
#this line below is line 51, which the output says is the failing line.
Visitor.new(:gender => 'Other', :shift_id => session[:current_shift_id], :reason_id => Reason.find_by_name("Products")).save
redirect_to(newsale_path, :notice => 'successfully added the sale')
else
私が得るエラーは次のとおりです。
undefined method `to_i' for #<Reason:0x56f5848>
Rails.root:
Application Trace | Framework Trace | Full Trace
app/controllers/sales_controller.rb:51:in `new'
app/controllers/sales_controller.rb:51:in `create'
最初はReason.find_by_nameかもしれないと思ったので、それを有効な整数値に置き換えましたが、それでも失敗しました。失敗する可能性のある他のコードはroutes.rbだけで、次のエントリがあります。
match 'newsale', :to => 'sales#newsale'
最後に、webrickへの出力は、@ saleオブジェクトを保存するSQL呼び出しを実際に示しているため、混乱を招きます。次の行が表示されます。
SELECT "reasons".* FROM "reasons" WHERE "reasons"."name" = 'Products' LIMIT 1
Completed 500 Internal Server Error in 104ms