คำถามติดแท็ก rails-activerecord

การใช้งานการแม็ปเชิงสัมพันธ์เชิงวัตถุ (ORM) โดยใช้รูปแบบ Active Record ในกรอบ Ruby on Rails

26
ฉันจะตั้งค่าเริ่มต้นใน ActiveRecord ได้อย่างไร
ฉันจะตั้งค่าเริ่มต้นใน ActiveRecord ได้อย่างไร ฉันเห็นโพสต์จาก Pratik ที่อธิบายโค้ดอันน่าเกลียดและซับซ้อน: http://m.onkey.org/2007/7/24/how-to-set-default-values-in-your-model class Item < ActiveRecord::Base def initialize_with_defaults(attrs = nil, &block) initialize_without_defaults(attrs) do setter = lambda { |key, value| self.send("#{key.to_s}=", value) unless !attrs.nil? && attrs.keys.map(&:to_s).include?(key.to_s) } setter.call('scheduler_type', 'hotseat') yield self if block_given? end end alias_method_chain :initialize, :defaults end ฉันได้เห็นตัวอย่างต่อไปนี้ googling ไปรอบ ๆ : def initialize …

11
วิธีที่ง่ายที่สุดในการทำซ้ำบันทึกสถิติของ Activerecord คืออะไร
ฉันต้องการทำสำเนาบันทึก activerecord โดยเปลี่ยนฟิลด์เดียวในกระบวนการ (นอกเหนือจากid ) วิธีที่ง่ายที่สุดในการบรรลุเป้าหมายนี้คืออะไร? ฉันรู้ว่าฉันสามารถสร้างระเบียนใหม่จากนั้นวนซ้ำแต่ละเขตข้อมูลคัดลอกเขตข้อมูลแต่ละเขตข้อมูล - แต่ฉันคิดว่าต้องมีวิธีที่ง่ายกว่าในการทำเช่นนี้ ... เช่น: @newrecord=Record.copy(:id) *perhaps?*

5
คุณจะเขียนการโยกย้ายเพื่อเปลี่ยนชื่อรุ่น ActiveRecord และตารางใน Rails ได้อย่างไร?
ฉันตั้งชื่อได้แย่มากและตระหนักว่ามีชื่อชุดที่ดีกว่าสำหรับโมเดลของฉันในแอพ Rails ของฉัน มีวิธีใดบ้างที่จะใช้การย้ายข้อมูลเพื่อเปลี่ยนชื่อรุ่นและตารางที่เกี่ยวข้อง

5
Rails 4: รายการประเภทข้อมูลที่มีอยู่
ฉันจะหารายการประเภทข้อมูลที่สามารถใช้ใน Ruby on Rails ได้ที่ไหน เช่น text string integer float date ฉันเรียนรู้เกี่ยวกับสิ่งใหม่ ๆ อยู่เสมอและฉันชอบที่จะมีรายการที่ฉันสามารถอ้างอิงได้ง่าย

5
ฉันจะรับชื่อคลาส Ruby ได้อย่างไร
ฉันจะรับชื่อคลาสจากวัตถุ ActiveRecord ได้อย่างไร ฉันมี: result = User.find(1) ฉันเหนื่อย: result.class # => User(id: integer, name: string ...) result.to_s # => #<User:0x3d07cdc>" ฉันต้องการชื่อคลาสเท่านั้นในสตริง ( Userในกรณีนี้) มีวิธีการไหม? ฉันรู้ว่ามันค่อนข้างธรรมดา แต่ฉันค้นหาทั้งเอกสารของ Rails และ Ruby และฉันหามันไม่เจอ

4
Rails update_attributes โดยไม่บันทึก?
มีทางเลือกอื่นสำหรับ update_attributes ที่ไม่ได้บันทึกบันทึกหรือไม่? ดังนั้นฉันสามารถทำสิ่งที่ชอบ: @car = Car.new(:make => 'GMC') #other processing @car.update_attributes(:model => 'Sierra', :year => "2012", :looks => "Super Sexy, wanna make love to it") #other processing @car.save BTW ฉันรู้ว่าฉันทำได้@car.model = 'Sierra'แต่ฉันต้องการอัปเดตพวกเขาทั้งหมดในบรรทัดเดียว

5
Rails ที่เงื่อนไขใช้ NOT NIL
ใช้สไตล์ 3 รางฉันจะเขียนสิ่งที่ตรงกันข้ามอย่างไร: Foo.includes(:bar).where(:bars=>{:id=>nil}) ฉันต้องการหาที่ id ไม่ได้เป็นศูนย์ ฉันเหนื่อย: Foo.includes(:bar).where(:bars=>{:id=>!nil}).to_sql แต่มันกลับมา: => "SELECT \"foos\".* FROM \"foos\" WHERE (\"bars\".\"id\" = 1)" นั่นไม่ใช่สิ่งที่ฉันต้องการแน่นอนและเกือบจะดูเหมือนเป็นข้อผิดพลาดใน AREL

8
Rails: include vs. : joins
นี่เป็นคำถามที่ว่า "ทำไมสิ่งต่าง ๆ ถึงทำงานแบบนี้" มากกว่าคำถามที่ว่า "ฉันไม่รู้จะทำอย่างไร" ดังนั้นพระกิตติคุณในการดึงบันทึกที่เกี่ยวข้องที่คุณรู้ว่าคุณจะใช้คือการใช้:includeเพราะคุณจะได้เข้าร่วมและหลีกเลี่ยงการสืบค้นเพิ่มเติม: Post.all(:include => :comments) อย่างไรก็ตามเมื่อคุณดูล็อกจะไม่มีการเข้าร่วมเกิดขึ้น: Post Load (3.7ms) SELECT * FROM "posts" Comment Load (0.2ms) SELECT "comments.*" FROM "comments" WHERE ("comments".post_id IN (1,2,3,4)) ORDER BY created_at asc) มันเป็นทางลัดเพราะมันดึงทุกความคิดเห็นในครั้งเดียว แต่ก็ยังไม่เข้าร่วม (ซึ่งเป็นสิ่งเอกสารทั้งหมดที่ดูเหมือนว่าจะพูด) วิธีเดียวที่ฉันจะเข้าร่วมได้คือใช้:joinsแทน:include: Post.all(:joins => :comments) และบันทึกแสดง: Post Load (6.0ms) SELECT "posts".* FROM "posts" INNER JOIN …

3
คุณจะลบวัตถุ ActiveRecord ได้อย่างไร
คุณจะลบวัตถุ ActiveRecord ได้อย่างไร ฉันดูActive Record Queryingและไม่มีอะไรในการลบที่ฉันเห็น ลบโดยid, ลบวัตถุปัจจุบันเช่น: user.remove, คุณสามารถลบตามwhereคำสั่งได้หรือไม่?

7
เพิ่มการย้ายข้อมูลคอลัมน์อ้างอิงใน Rails 4
ผู้ใช้มีการอัปโหลดจำนวนมาก ฉันต้องการที่จะเพิ่มคอลัมน์ไปยังตารางที่อ้างอิงuploads userการโยกย้ายควรมีลักษณะอย่างไร นี่คือสิ่งที่ฉันมี ผมไม่แน่ใจว่าผมควรจะใช้ (1) :user_id, :intหรือ :user, :references(2) ฉันไม่แน่ใจด้วยซ้ำว่า (2) ใช้งานได้ เพียงแค่พยายามทำสิ่งนี้ด้วยวิธี "ทางรถไฟ" class AddUserToUploads < ActiveRecord::Migration def change add_column :uploads, :user_id, :integer end end คำถามที่เกี่ยวข้องยกเว้น Rails 3 Rails 3 migrations: การเพิ่มคอลัมน์อ้างอิง?

8
Ruby on Rails สร้างฟิลด์ model: type - ตัวเลือกสำหรับ field: type คืออะไร?
ฉันกำลังพยายามสร้างโมเดลใหม่และลืมไวยากรณ์เพื่ออ้างอิง ID ของโมเดลอื่น ฉันค้นหาด้วยตัวเอง แต่ฉันไม่ได้คิดออกมาในบรรดาลิงค์เอกสาร Ruby on Rails ทั้งหมดของฉันวิธีการค้นหาแหล่งที่ชัดเจน $ rails g model Item name:string description:text(และที่นี่reference:productหรือreferences:product) แต่คำถามที่ดีกว่าคือที่หรือวิธีการที่ผมสามารถมองหาชนิดของความโง่เขลานี้ได้อย่างง่ายดายในอนาคตหรือไม่ หมายเหตุ: ฉันได้เรียนรู้วิธีการที่ยากว่าถ้าฉันพิมพ์ผิดหนึ่งในตัวเลือกเหล่านี้และทำการโยกย้ายของฉันจากนั้น Ruby on Rails จะทำให้ฐานข้อมูลของฉันrake db:rollbackหมดสิ้น ... ฉันแน่ใจว่าฉันไม่เข้าใจบางอย่าง แต่จนกว่าฉันจะ ... ข้อมูล "รายละเอียด" ที่ส่งคืนโดยrails g modelยังทำให้ฉันเกา ...

3
ทศนิยมเทียบกับทศนิยมใน ActiveRecord
บางครั้งประเภทข้อมูล Activerecord ทำให้ฉันสับสน เอ่อบ่อย หนึ่งในคำถามที่นิรันดร์ของฉันคือสำหรับกรณีที่กำหนด ฉันควรใช้:decimalหรือ:float? ฉันเคยเจอลิงก์นี้บ่อยครั้งActiveRecord:: ทศนิยม vs: float? แต่คำตอบไม่ชัดเจนพอที่ฉันจะมั่นใจ: ฉันได้เห็นหลายกระทู้ที่ผู้คนแนะนำให้แบนไม่เคยใช้ทศนิยมและใช้ทศนิยมเสมอ ฉันเคยเห็นคำแนะนำจากบางคนเพื่อใช้โฟลตสำหรับการใช้งานทางวิทยาศาสตร์เท่านั้น นี่คือตัวอย่างบางกรณี: Geolocation / ละติจูด / ลองจิจูด: -45.756688, 120.5777777... อัตราส่วน / ร้อยละ: 0.9, 1.25, 1.333, 1.4143... ฉันเคยใช้:decimalในอดีต แต่ฉันพบว่าการจัดการกับBigDecimalวัตถุใน Ruby นั้นไม่สะดวกสบายเมื่อเทียบกับการลอย ฉันรู้ว่าฉันสามารถใช้:integerเพื่อเป็นตัวแทนเงิน / เซ็นต์ได้เช่นกัน แต่มันก็ไม่เหมาะสำหรับกรณีอื่น ๆ เช่นเมื่อปริมาณที่ความแม่นยำอาจเปลี่ยนแปลงไปตามกาลเวลา ข้อดี / ข้อเสียของการใช้แต่ละข้อมีอะไรบ้าง มีกฎอะไรบ้างที่จะรู้ว่าควรใช้แบบไหน

7
ActiveModel :: ForbiddenAttributesError เมื่อสร้างผู้ใช้ใหม่
ฉันมีโมเดลนี้ใน Ruby แต่มันพ่น a ActiveModel::ForbiddenAttributesError class User < ActiveRecord::Base attr_accessor :password validates :username, :presence => true, :uniqueness => true, :length => {:in => 3..20} VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, :uniqueness => true, format: { with: VALID_EMAIL_REGEX } validates :password, :confirmation => true validates_length_of :password, :in => 6..20, :on …

15
จะแสดงข้อความค้นหา NOT IN ด้วย ActiveRecord / Rails ได้อย่างไร
เพียงแค่อัปเดตสิ่งนี้เพราะดูเหมือนว่ามีผู้คนมากมายมาที่นี่หากคุณใช้ Rails 4 ดูคำตอบของ Trung Lê`และ VinniVidiVicci Topic.where.not(forum_id:@forums.map(&:id)) Topic.where(published:true).where.not(forum_id:@forums.map(&:id)) ฉันหวังว่าจะมีวิธีแก้ปัญหาง่ายๆที่ไม่เกี่ยวข้องfind_by_sqlถ้าไม่เช่นนั้นฉันเดาว่าจะต้องใช้งานได้ ฉันพบบทความนี้ซึ่งอ้างอิงสิ่งนี้: Topic.find(:all, :conditions => { :forum_id => @forums.map(&:id) }) ซึ่งเหมือนกับ SELECT * FROM topics WHERE forum_id IN (<@forum ids>) ฉันสงสัยว่ามีวิธีที่จะทำเช่นNOT INนั้นเช่น: SELECT * FROM topics WHERE forum_id NOT IN (<@forum ids>)

6
ActiveRecord: ขนาดเทียบกับจำนวน
ในทางรถไฟแล้วคุณจะพบจำนวนของระเบียนโดยใช้ทั้งสองและModel.size Model.countหากคุณกำลังจัดการกับข้อความค้นหาที่ซับซ้อนมากขึ้นจะมีข้อได้เปรียบอะไรบ้างหากใช้วิธีหนึ่งกับอีกวิธีหนึ่ง แตกต่างกันอย่างไร ตัวอย่างเช่นฉันมีผู้ใช้ที่มีรูปถ่าย หากฉันต้องการแสดงตารางผู้ใช้และจำนวนภาพถ่ายที่มีพวกเขาจะเรียกใช้อินสแตนซ์จำนวนมากที่user.photos.sizeเร็วขึ้นหรือช้าลงกว่าเดิมuser.photos.countหรือไม่ ขอบคุณ!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.