ruby-on-rails - 如何更新rails中的 bool 值

标签 ruby-on-rails database postgresql

我正在尝试在创建stay 期间将runnoccupied 字段更新为true .

def create
    if params[:id].present?
      @patient = Patient.find(params[:id])
      @stay = @patient.stays.build(stay_params)
      @stay.is_current = true
      Runn.find_by_id(@stay.runn_id).update_attribute(:occupied, true)
    else
      @stay = Stays.new(stay_params)
    end
    if @stay.save
      redirect_to @patient
    end
  end

这是我的 stays_controller.rb 中的创建方法

class Stay < ActiveRecord::Base
  belongs_to :patient
  has_one :runn
  has_many :feeding_events
  has_many :ud_events
  has_many :misc_stay_events

  after_create :update
  private
    def update
        self.check_in_dt = Time.new
        self.is_current = true
    end
end

这是stay.rb

class Runn < ActiveRecord::Base

  belongs_to :ward
  belongs_to :stay

end

这是runn.rb

当我用控制台显示所有的时候,它们都显示occupied是false,这是有道理的,因为我在seeds中就是这样设置的。但是,我想知道如何更新 occupied?当我这样做时:

[1] pry(main)> Runn.find_by_id(1)
  Runn Load (0.5ms)  SELECT  "runns".* FROM "runns" WHERE "runns"."id" = $1 LIMIT 1  [["id", 1]]
=> #<Runn:0x007f478460d6c8
 id: 1,
 ident: "Run 0.0",
 size: "Medium,",
 amenities: nil,
 created_at: Thu, 03 Dec 2015 05:50:01 UTC +00:00,
 updated_at: Thu, 03 Dec 2015 05:50:01 UTC +00:00,
 ward_id: 1,
 occupied: false>
[2] pry(main)> Runn.find_by_id(1).occupied = true
  Runn Load (0.6ms)  SELECT  "runns".* FROM "runns" WHERE "runns"."id" = $1 LIMIT 1  [["id", 1]]
=> true
[3] pry(main)> Runn.find_by_id(1)
  Runn Load (0.5ms)  SELECT  "runns".* FROM "runns" WHERE "runns"."id" = $1 LIMIT 1  [["id", 1]]
=> #<Runn:0x007f478467a6b0
 id: 1,
 ident: "Run 0.0",
 size: "Medium,",
 amenities: nil,
 created_at: Thu, 03 Dec 2015 05:50:01 UTC +00:00,
 updated_at: Thu, 03 Dec 2015 05:50:01 UTC +00:00,
 ward_id: 1,
 occupied: false>
[4] pry(main)> 

已占用 尚未更新。但是,使用 update_attribute:

[4] pry(main)> Runn.find_by_id(1).update_attribute(:occupied, true)
  Runn Load (0.4ms)  SELECT  "runns".* FROM "runns" WHERE "runns"."id" = $1 LIMIT 1  [["id", 1]]
   (0.2ms)  BEGIN
  SQL (0.4ms)  UPDATE "runns" SET "occupied" = $1, "updated_at" = $2 WHERE "runns"."id" = $3  [["occupied", "t"], ["updated_at", "2015-12-03 05:52:33.949456"], ["id", 1]]
   (11.0ms)  COMMIT
=> true
[5] pry(main)> Runn.find_by_id(1)
  Runn Load (0.5ms)  SELECT  "runns".* FROM "runns" WHERE "runns"."id" = $1 LIMIT 1  [["id", 1]]
=> #<Runn:0x007f479d0fd098
 id: 1,
 ident: "Run 0.0",
 size: "Medium,",
 amenities: nil,
 created_at: Thu, 03 Dec 2015 05:50:01 UTC +00:00,
 updated_at: Thu, 03 Dec 2015 05:52:33 UTC +00:00,
 ward_id: 1,
 occupied: true>
[6] pry(main)> Runn.all
  Runn Load (0.6ms)  SELECT "runns".* FROM "runns"
=> [#<Runn:0x007f479d0aafa0
  id: 2,
  ident: "Run 0.1",
  size: "Small,",
  amenities: nil,
  created_at: Thu, 03 Dec 2015 05:50:01 UTC +00:00,
  updated_at: Thu, 03 Dec 2015 05:50:01 UTC +00:00,
  ward_id: 1,
  occupied: false>,
 #<Runn:0x007f479d0aae60
  id: 3,
  ident: "Run 1.0",
  size: "Small,",
  amenities: nil,
  created_at: Thu, 03 Dec 2015 05:50:01 UTC +00:00,
  updated_at: Thu, 03 Dec 2015 05:50:01 UTC +00:00,
  ward_id: 2,
  occupied: false>,
 #<Runn:0x007f479d0aad20
  id: 4,
  ident: "Run 1.1",
  size: "Medium,",
  amenities: nil,

已成功更新,但已从 Runn.all 中删除。有什么建议吗?

编辑:

[1] pry(main)> Runn.all
  Runn Load (0.8ms)  SELECT "runns".* FROM "runns"
=> [#<Runn:0x007f4784e9b3a8
  id: 1,
  ident: "Run 0.0",
  size: "Medium,",
  amenities: nil,
  created_at: Thu, 03 Dec 2015 05:59:02 UTC +00:00,
  updated_at: Thu, 03 Dec 2015 05:59:02 UTC +00:00,
  ward_id: 1,
  occupied: false>,
 #<Runn:0x007f4784e98a40
  id: 2,
  ident: "Run 0.1",
  size: "Small,",
  amenities: nil,
  created_at: Thu, 03 Dec 2015 05:59:02 UTC +00:00,
  updated_at: Thu, 03 Dec 2015 05:59:02 UTC +00:00,
  ward_id: 1,
  occupied: false>,
 #<Runn:0x007f4784e98900
  id: 3,
  ident: "Run 1.0",
  size: "Small,",
  amenities: nil,

原始 Runn.all。

最佳答案

请尝试更新:

runn = Runn.find_by_id(1)
if !runn.nil?
  runn.occupied = true
  runn.save
end

关于ruby-on-rails - 如何更新rails中的 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34058817/

相关文章:

java - 如何正确地将图片路径保存在数据库中并将其分配给按钮?

c# - 如何设置现有 SQL Server 数据库的所有者

postgresql - Postgres : index on cosine similarity of float arrays for one-to-many search

ruby-on-rails - 访问已处理的 ActiveStorage::Variant 的原始字节

ruby-on-rails - Rails 序列化数据验证

ruby-on-rails - 在哪里以及如何处理 Rails 异常?

postgresql - 将 vachar 列更新为 postgreSQL 中的日期

ruby-on-rails - Rails 3.1 has_many through - 反复出现的噩梦

database - JPA : best practices with unidirectional OneToMany

sql - 根据foreign_key值更新每行中的值