如何在rails

时间:2015-12-03 05:53:54

标签: ruby-on-rails database postgresql

我在创建occupied期间尝试将runn的{​​{1}}字段更新为true

stay

这是我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

这是runn.rb

当我使用控制台显示所有内容时,它们都显示class Runn < ActiveRecord::Base belongs_to :ward belongs_to :stay end 是假的,这是有道理的,因为我是如何在种子中设置它的。但是,我想知道如何更新occupied?当我这样做时:

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)> 尚未更新。但是,使用occupied

update_attribute

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

编辑:

[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 个答案:

答案 0 :(得分:0)

请尝试更新:

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