2017-09-24 45 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并在数据库中添加该字段(如果该字段不存在)。