我去过类似的问题,比如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