我去過類似的問題,比如this和this,但這並沒有爲我解決。update_attributes不會將值保存到數據庫中
我的控制器代碼。
# GET `/reservations/new`
def new
@user_id = current_user.id
if current_user.has_reserved
format.html { redirect_to reservations_url, notice: 'Only one reservation per customer is allowed' }
end
@car_id = params[:car_id]
@c = Car.where(:id => @car_id).first
puts "Hello"
puts @c.id
puts @c.update_attributes({:status => 'reserved'})
puts @c.status
@reservation = Reservation.new
end
這是我的控制檯,當我訪問該頁面時。
Hello
4
(0.1ms) begin transaction
(0.1ms) commit transaction
true
reserved
現在,當我檢查數據庫中軌控制檯
Car.where(:status => 'reserved')
這讓我沒有值。 (即使Car.all
顯示所有汽車爲「可用」,這是默認狀態)的上述
輸出:
irb(main):009:0> Car.where(:status => 'reserved')
Car Load (0.3ms) SELECT "cars".* FROM "cars" WHERE "cars"."status" = ? LIMIT ? [["status", "reserved"], ["LIMIT", 11]]
=> #<ActiveRecord::Relation []>
當我從其他的問題雲集,update_attributes
保存記錄也。它迴歸真實。那爲什麼它不反映在數據庫中?
編輯:添加模型文件代碼
Car.rb
class Car < ApplicationRecord
validates_inclusion_of :status, :in => ['available','reserved','checked_out'], :default => 'available'
validates_inclusion_of :style, :in => ['coupe','sedan','suv'], :default => 'sedan'
validates_length_of :licence_plate, :is => 7, :unique => true
attr_accessor :status
end
Reservation.rb
class Reservation < ApplicationRecord
belongs_to :user
belongs_to :car
attr_accessor :can_checkout, :can_return, :can_reserve, :checked_out, :returned
end
從那裏reservation/new
被稱爲「意見/汽車/ index.html的代碼。 ERB」。
<td><%= link_to "Reserve", controller: "reservations", action: "new", car_id: car.id%></td>
爲什麼更新記錄在控制器的'新'操作?通常情況下,新動作會根據需要加載記錄,然後新視圖包含一個表單以創建新的記錄,然後將表單提交給更新操作以將記錄保存到數據庫中...可以複製監控控制器的新觀點? – Maxence
不要使用放入。使用logger.debug或您想要登錄的任何級別。投入是不是爲軌道輸出 – jamesc
關於我上面的評論,我的意思是'創建行動'而不是'更新行動' – Maxence