গৃহীত উত্তরটি সাধারণত সমস্ত কিছু জুড়ে থাকে তবে আমি কিছু যুক্ত করতে চাই, যদি আপনি মডেলটির সাথে আপডেট করার মতো পদ্ধতিতে কাজ করার পরিকল্পনা করছেন তবে আপনি একটি একক রেকর্ড পুনরুদ্ধার করছেন (যার id
আপনি জানেন না), find_by
তা হলে যাওয়ার উপায়, কারণ এটি রেকর্ডটি পুনরুদ্ধার করে এবং এটি অ্যারেতে রাখে না
irb(main):037:0> @kit = Kit.find_by(number: "3456")
Kit Load (0.9ms) SELECT "kits".* FROM "kits" WHERE "kits"."number" =
'3456' LIMIT 1
=> #<Kit id: 1, number: "3456", created_at: "2015-05-12 06:10:56",
updated_at: "2015-05-12 06:10:56", job_id: nil>
irb(main):038:0> @kit.update(job_id: 2)
(0.2ms) BEGIN Kit Exists (0.4ms) SELECT 1 AS one FROM "kits" WHERE
("kits"."number" = '3456' AND "kits"."id" != 1) LIMIT 1 SQL (0.5ms)
UPDATE "kits" SET "job_id" = $1, "updated_at" = $2 WHERE "kits"."id" =
1 [["job_id", 2], ["updated_at", Tue, 12 May 2015 07:16:58 UTC +00:00]]
(0.6ms) COMMIT => true
তবে আপনি যদি ব্যবহার করেন where
তবে আপনি সরাসরি এটি আপডেট করতে পারবেন না
irb(main):039:0> @kit = Kit.where(number: "3456")
Kit Load (1.2ms) SELECT "kits".* FROM "kits" WHERE "kits"."number" =
'3456' => #<ActiveRecord::Relation [#<Kit id: 1, number: "3456",
created_at: "2015-05-12 06:10:56", updated_at: "2015-05-12 07:16:58",
job_id: 2>]>
irb(main):040:0> @kit.update(job_id: 3)
ArgumentError: wrong number of arguments (1 for 2)
এই জাতীয় ক্ষেত্রে আপনাকে এটি এটি নির্দিষ্ট করতে হবে
irb(main):043:0> @kit[0].update(job_id: 3)
(0.2ms) BEGIN Kit Exists (0.6ms) SELECT 1 AS one FROM "kits" WHERE
("kits"."number" = '3456' AND "kits"."id" != 1) LIMIT 1 SQL (0.6ms)
UPDATE "kits" SET "job_id" = $1, "updated_at" = $2 WHERE "kits"."id" = 1
[["job_id", 3], ["updated_at", Tue, 12 May 2015 07:28:04 UTC +00:00]]
(0.5ms) COMMIT => true
find_by
অবচয় করা হয়নি, তবে সিনট্যাক্সটি কিছুটা পরিবর্তন হচ্ছে। থেকেfind_by_name("Bob")
থেকেfind_by(:name, "Bob")
।