update_attributes未将值保存到数据库

时间:2017-09-24 20:59:02

标签: ruby-on-rails

我经历了各种类似的问题,例如thisthis,但这并没有为我解决。

我的控制器代码。

# 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

现在我在rails console中检查数据库

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的代码,'views / cars / index.html.erb'。

<td><%= link_to "Reserve", controller: "reservations", action: "new", car_id: car.id%></td>

2 个答案:

答案 0 :(得分:2)

汽车在数据库中是否有状态字段?

如果是这样,为什么要使用 attr_accessor:status ?在模型中。如果该字段存在则没有必要。

删除 attr_accessor 并在数据库中添加该字段(如果不存在)。

答案 1 :(得分:1)

预订的提交表单行动&#39; new&#39;视图会调用&#39;创建&#39;保留控制器的方法,您可以将car_id作为参数传递给该方法。然后在提交方法中,您可以通过 @car = Car.find(params [:car_id])获取关联的汽车并尝试更新汽车状态