2017-09-24 46 views
0

我去過類似的問題,比如thisthis,但這並沒有爲我解決。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> 
+0

爲什麼更新記錄在控制器的'新'操作?通常情況下,新動作會根據需要加載記錄,然後新視圖包含一個表單以創建新的記錄,然後將表單提交給更新操作以將記錄保存到數據庫中...可以複製監控控制器的新觀點? – Maxence

+1

不要使用放入。使用logger.debug或您想要登錄的任何級別。投入是不是爲軌道輸出 – jamesc

+0

關於我上面的評論,我的意思是'創建行動'而不是'更新行動' – Maxence

回答

1

預訂'新'視圖的提交表單操作會調用預訂控制器的'創建'方法,您可以將car_id作爲參數傳遞給該方法。然後在提交方法中,您可以通過@car = Car.find(params [:car_id])獲得相關車輛並嘗試更新車輛狀態

2

是否有車在數據庫中狀態場?

如果是這樣,爲什麼你使用attr_accessor:status?在模型中。如果該字段存在,則不是必需的。

刪除attr_accessor並在數據庫中添加該字段(如果該字段不存在)。