我正在尝试在创建stay
期间将runn
的occupied
字段更新为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/