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

Active Record เป็นรูปแบบที่รวมลอจิกโดเมนกับสตอเรจที่เป็นนามธรรมในออบเจ็กต์เดียว ใช้แท็กนี้สำหรับคำถามเกี่ยวกับรูปแบบ [rail-activerecord] สำหรับคำถามเกี่ยวกับเฟรมเวิร์ก Rails ORM


9
วิธีการคืนค่าความสัมพันธ์ ActiveRecord ที่ว่างเปล่า?
หากฉันมีขอบเขตที่มีแลมบ์ดาและใช้การโต้แย้งขึ้นอยู่กับมูลค่าของการโต้แย้งฉันอาจรู้ว่าจะไม่มีการแข่งขันใด ๆ แต่ฉันยังต้องการคืนความสัมพันธ์ไม่ใช่อาร์เรย์ที่ว่างเปล่า: scope :for_users, lambda { |users| users.any? ? where("user_id IN (?)", users.map(&:id).join(',')) : [] } สิ่งที่ฉันต้องการจริงๆคือวิธีการ "ไม่มี" ตรงข้ามกับ "ทั้งหมด" ที่ส่งคืนความสัมพันธ์ที่ยังคงถูกผูกมัดอยู่ แต่ผลลัพธ์ในการค้นหาจะเกิดการลัดวงจร

11
Rails: เลือกค่าที่ไม่ซ้ำจากคอลัมน์
ฉันมีวิธีแก้ปัญหาการทำงานอยู่แล้ว แต่ฉันอยากรู้ว่าทำไมสิ่งนี้ถึงใช้งานไม่ได้: ratings = Model.select(:rating).uniq ratings.each { |r| puts r.rating } มันเลือก แต่ไม่พิมพ์ค่าที่ไม่ซ้ำกันมันจะพิมพ์ค่าทั้งหมดรวมถึงรายการที่ซ้ำกัน และอยู่ในเอกสารประกอบ: http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields

6
งานเรคของ Rails ให้การเข้าถึงกับรุ่น ActiveRecord หรือไม่?
ฉันพยายามสร้างงานเรคที่กำหนดเอง แต่ดูเหมือนว่าฉันไม่สามารถเข้าถึงโมเดลของฉันได้ ฉันคิดว่านี่เป็นสิ่งที่รวมอยู่ในงานทางรถไฟโดยปริยาย ฉันมีรหัสต่อไปนี้ใน lib / task / test.rake: namespace :test do task :new_task do puts Parent.all.inspect end end และนี่คือรูปแบบผู้ปกครองของฉันที่มีลักษณะ: class Parent < ActiveRecord::Base has_many :children end มันเป็นตัวอย่างง่ายๆ แต่ฉันได้รับข้อผิดพลาดดังต่อไปนี้: /> rake test:new_task (in /Users/arash/Documents/dev/soft_deletes) rake aborted! uninitialized constant Parent (See full trace by running task with --trace) ความคิดใด ๆ ขอบคุณ


19
การค้นหาแบบตรงตามตัวพิมพ์ใหญ่ - เล็กในโมเดล Rails
รุ่นผลิตภัณฑ์ของฉันมีบางรายการ Product.first => #<Product id: 10, name: "Blue jeans" > ตอนนี้ฉันกำลังนำเข้าพารามิเตอร์ผลิตภัณฑ์จากชุดข้อมูลอื่น แต่มีความไม่สอดคล้องกันในการสะกดชื่อ ตัวอย่างเช่นในชุดข้อมูลอื่นBlue jeansอาจสะกดBlue Jeansได้ ฉันต้องการProduct.find_or_create_by_name("Blue Jeans")แต่สิ่งนี้จะสร้างผลิตภัณฑ์ใหม่เกือบเหมือนผลิตภัณฑ์แรก ตัวเลือกของฉันคืออะไรหากฉันต้องการค้นหาและเปรียบเทียบชื่อที่ลดระดับลง ปัญหาด้านประสิทธิภาพไม่ใช่เรื่องสำคัญจริง ๆ ที่นี่: มีผลิตภัณฑ์เพียง 100-200 รายการและฉันต้องการเรียกใช้สิ่งนี้เป็นการย้ายข้อมูลที่นำเข้าข้อมูล ความคิดใด ๆ

6
สิ่งที่ทำให้เกิดข้อผิดพลาด ActiveRecord :: ReadOnlyRecord นี้?
นี่ตามคำถามก่อนหน้านี้ซึ่งตอบแล้ว ฉันค้นพบจริงฉันสามารถลบการเข้าร่วมจากแบบสอบถามนั้นดังนั้นตอนนี้แบบสอบถามที่ทำงานอยู่ start_cards = DeckCard.find :all, :joins => [:card], :conditions => ["deck_cards.deck_id = ? and cards.start_card = ?", @game.deck.id, true] ดูเหมือนว่าจะใช้งานได้ อย่างไรก็ตามเมื่อฉันพยายามย้าย DeckCards เหล่านี้ไปยังการเชื่อมโยงอื่นฉันได้รับข้อผิดพลาด ActiveRecord :: ReadOnlyRecord นี่คือรหัส for player in @game.players player.tableau = Tableau.new start_card = start_cards.pop start_card.draw_pile = false player.tableau.deck_cards << start_card # the error occurs on this …

5
Rails find_or_create_by มากกว่าหนึ่งคุณลักษณะ?
มีแอตทริบิวต์แบบไดนามิกที่มีประโยชน์ในบันทึกที่ใช้งานที่เรียกว่า find_or_create_by: Model.find_or_create_by_<attribute>(:<attribute> => "") แต่ถ้าฉันต้องการ find_or_create ด้วยแอตทริบิวต์มากกว่าหนึ่งรายการล่ะ ว่าฉันมีรูปแบบการจัดการความสัมพันธ์ M: M ระหว่างกลุ่มและสมาชิกที่เรียกว่า GroupMember ฉันสามารถมีหลายกรณีที่ member_id = 4 แต่ฉันไม่ต้องการมากกว่าหนึ่งครั้งที่ member_id = 4 และ group_id = 7 ฉันกำลังพยายามหาว่าเป็นไปได้ไหมที่จะทำสิ่งนี้: GroupMember.find_or_create(:member_id => 4, :group_id => 7) ฉันรู้ว่าอาจมีวิธีที่ดีกว่าในการจัดการกับสิ่งนี้ แต่ฉันชอบความสะดวกสบายของแนวคิดของ find_or_create

28
มีวิธีรับโมเดลทั้งหมดในแอพ Rails ของคุณหรือไม่?
มีวิธีที่คุณจะได้รับชุดโมเดลทั้งหมดในแอพ Rails ของคุณหรือไม่? โดยทั่วไปฉันสามารถทำสิ่งที่ชอบของ: - Models.each do |model| puts model.class.name end

4
delete_all vs destroy_all?
ฉันกำลังมองหาวิธีที่ดีที่สุดในการลบบันทึกออกจากตาราง ตัวอย่างเช่นฉันมีผู้ใช้ที่มี ID ผู้ใช้อยู่ในหลาย ๆ ตาราง ฉันต้องการลบผู้ใช้นี้และทุกระเบียนที่มี ID ของเขาในตารางทั้งหมด u = User.find_by_name('JohnBoy') u.usage_indexes.destroy_all u.sources.destroy_all u.user_stats.destroy_all u.delete งานนี้และลบข้อมูลทั้งหมดของผู้ใช้จากตารางทั้งหมด แต่ผมได้ยินมาว่าเป็นอย่างมากกระบวนการหนักดังนั้นฉันพยายามdestroy_all delete_allมันจะลบผู้ใช้ออกจากตารางผู้ใช้ของเขาเองและidจากตารางอื่น ๆ ทั้งหมดจะถูกทำให้เป็นโมฆะ แต่จะทำให้ระเบียนนั้นไม่เปลี่ยนแปลง ใครสามารถแบ่งปันสิ่งที่กระบวนการที่ถูกต้องสำหรับการทำงานเช่นนี้? ฉันเห็นว่าdestroy_allเรียกใช้destroyฟังก์ชันบนวัตถุที่เกี่ยวข้องทั้งหมด แต่ฉันต้องการยืนยันวิธีการที่ถูกต้อง

3
ตรวจสอบเอกลักษณ์ของหลายคอลัมน์
มีวิธีการทางรถไฟในการตรวจสอบว่าบันทึกจริงไม่ซ้ำกันและไม่เพียงคอลัมน์? ตัวอย่างเช่นโมเดลมิตรภาพ / ตารางไม่ควรมีบันทึกเหมือนกันหลายอย่างเช่น: user_id: 10 | friend_id: 20 user_id: 10 | friend_id: 20


10
Rails 3 migrations: การเพิ่มคอลัมน์อ้างอิง?
ถ้าฉันสร้างการโยกย้าย 3 ทางรถไฟใหม่ด้วย (ตัวอย่าง) rails g migration tester title:tester user:references ทุกอย่างทำงานได้ดี ... แต่ถ้าฉันเพิ่มคอลัมน์ที่มีบางอย่างตามแนวของ: rails g migration add_user_to_tester user:references เขตข้อมูลอ้างอิงไม่เป็นที่รู้จัก ในระยะสั้นคำถามคือฉันจะเพิ่มคอลัมน์อ้างอิงไปยังการโยกย้ายรางจากบรรทัดคำสั่งได้อย่างไร


4
แทนที่เมธอดแอ็ตทริบิวต์ ActiveRecord
ตัวอย่างของสิ่งที่ฉันพูดถึง: class Person < ActiveRecord::Base def name=(name) super(name.capitalize) end def name super().downcase # not sure why you'd do this; this is just an example end end ดูเหมือนว่าจะใช้งานได้ แต่ฉันเพิ่งอ่านหัวข้อเกี่ยวกับวิธีการแทนที่คุณลักษณะในActiveRecord :: Base docsและแนะนำให้ใช้read_attributeและwrite_attributeวิธีการ ฉันคิดว่าต้องมีบางอย่างผิดปกติกับสิ่งที่ฉันทำในตัวอย่างด้านบน มิฉะนั้นเหตุใดพวกเขาจึงอวยพรวิธีเหล่านี้ในฐานะ "วิธีที่ถูกต้อง" เพื่อแทนที่วิธีการของแอตทริบิวต์ พวกเขายังบังคับสำนวนที่ขี้เหร่มากดังนั้นต้องมีเหตุผลที่ดี ... คำถามจริงของฉัน: มีบางอย่างผิดปกติกับตัวอย่างนี้หรือไม่?

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