การกำหนดค่าเริ่มต้นในขณะที่สร้างไฟล์การย้ายข้อมูล


105
rails generate migration AddRetweetsCountToTweet retweets_count:integer 

ตกลงฉันใช้บรรทัดด้านบนเพื่อสร้างไฟล์การย้ายข้อมูลที่สร้างโค้ดโดยอัตโนมัติในไฟล์ที่สร้างขึ้นเพื่อเพิ่มคอลัมน์ให้กับโมเดลทวีตที่มีจำนวนเต็มประเภทข้อมูล ตอนนี้ฉันต้องการเพิ่มค่าเริ่มต้นให้กับคอลัมน์ที่เพิ่มในขณะที่สร้างไฟล์การย้ายข้อมูล เป็นไปได้หรือไม่ ฉัน googled มัน แต่ไม่พบ ผู้ชายต้องการความช่วยเหลือ


ดูRailsGuideในหัวข้อ: guide.rubyonrails.org/migrations.htmlข้อมูลที่คุณกำลังค้นหาอยู่ในส่วนแรก Anatomy of a Migration
Austin Lin

1
ฉันรู้ว่าคุณหมายถึงอะไร ฉันยังคงพยายามตั้งค่าเริ่มต้นเช่นกันและมันเป็นความเจ็บปวดในการพยายามค้นหาข้อมูล การสร้าง SQL เปล่าก็ทำได้ง่ายขึ้นแม้ว่าจะไม่มีการโยกย้ายในการควบคุมเวอร์ชัน
Tass

คำตอบ:


167

ตัวสร้างการย้ายเริ่มต้นไม่จัดการค่าเริ่มต้น ( รองรับตัวแก้ไขคอลัมน์แต่ไม่รวมdefaultหรือnull) แต่คุณสามารถสร้างเครื่องกำเนิดไฟฟ้าของคุณเองได้

คุณยังสามารถอัปเดตไฟล์การย้ายข้อมูลด้วยตนเองก่อนที่จะทำงานได้rake db:migrateโดยเพิ่มตัวเลือกในadd_column:

add_column :tweet, :retweets_count, :integer, :null => false, :default => 0

... และอ่านRails API


9
โอเคขอบคุณสำหรับการตอบกลับ ฉันคิดว่ามันจะดีมากถ้าตัวสร้างการย้ายข้อมูลเริ่มต้นจะมีตัวเลือกในการจัดการค่าเริ่มต้นเพื่อที่ฉันจะได้ไม่ต้องแก้ไขไฟล์การย้ายข้อมูลหลังจากสร้างขึ้นเพื่อระบุค่าเริ่มต้น
kxhitiz


10

ใช่ฉันไม่เห็นวิธีใช้ "ค่าเริ่มต้น" ในคำสั่งตัวสร้างการย้ายข้อมูล แต่สามารถระบุค่าเริ่มต้นสำหรับคอลัมน์สตริงใหม่ได้ดังนี้โดยแก้ไขไฟล์การย้ายข้อมูลที่สร้างขึ้นก่อนที่จะใช้ "rake db: migrate":

class AddColumnToWidgets < ActiveRecord::Migration
  def change
    add_column :widgets, :colour, :string, default: 'red'
  end
end

เพิ่มคอลัมน์ใหม่ชื่อ 'color' ให้กับโมเดล 'Widget' ของฉันและตั้งค่า 'color' เริ่มต้นของวิดเจ็ตใหม่เป็น 'red'


(นี่คือใน Rails 4.2)
MSC

4

ฉันลอง t.boolean: active,: default => 1 ในไฟล์การย้ายข้อมูลเพื่อสร้างทั้งตาราง หลังจากรันการโอนย้ายนั้นเมื่อฉันเช็คอิน db มันทำให้เป็นโมฆะ แม้ว่าฉันจะบอกค่าเริ่มต้นเป็น "1" หลังจากนั้นฉันก็เปลี่ยนไฟล์การย้ายข้อมูลแบบนี้เล็กน้อยมันก็ใช้ได้สำหรับฉันสำหรับการตั้งค่าเริ่มต้นในการสร้างไฟล์การย้ายตาราง

t.boolean: active,: null => false,: default => 1. ทำงานให้ฉัน

My Rails framework เวอร์ชัน 4.0.0


:default => falseเหรอ?
Christopher Oezbek

2

ก่อนอื่นคุณจะต้องสร้างการย้ายข้อมูลสำหรับโมเดลพื้นฐานจากนั้นจึงสร้างการย้ายข้อมูลอีกครั้งเพื่อแก้ไขก่อนหน้าของคุณโดยใช้ change_column ...

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